如果我在使用我的应用程序时接到电话,则视图会降低一点,以便为顶部的 call 状态栏腾出空间。
通话结束后,视图将保持在“更改”状态。如何强制应用调整自身大小?目前,我必须终止该应用程序并重新启动。
最佳答案
您是否有任何覆盖-layoutSubviews
的自定义视图?
以我的经验,这意味着您有一个视图,该视图使用-layoutSubviews
进行自定义布局,但在适当的时间不调用-setNeedsLayout:
。通常为setting the frame does not force a layout(自动布局的处理方式有所不同)。
在任何覆盖-layoutSubviews
的视图中,尝试以下操作:
-(void)setFrame:(CGRect)frame
{
CGRect oldFrame = self.frame;
// This check changes behaviour slightly:
// v.frame = v.frame;
// no longer cancels animations.
// Sometimes this works around an animation glitch.
if (!CGRectEqualToRect(frame,oldFrame))
{
[super setFrame:frame];
if (!CGSizeEqualToSize(frame.size,oldFrame.size))
{
// Only layout if the size changes.
[self setNeedsLayout];
}
}
}
(您可以对
-setBounds:
进行相同的操作,但是通常不需要这样做,因为AFAIK不会被UIScrollView
除外的UIKit调用。)