如果我在使用我的应用程序时接到一个电话,那么视图会有所下降,为顶部的通话状态栏腾出空间。
一旦通话结束,视图将保持此“已更改”状态。如何强制应用重新调整大小?目前我必须杀死该应用并重新启动。
答案 0 :(得分:2)
您是否有覆盖-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:
执行相同的操作,但通常不需要它,因为除了UIScrollView
之外,UIKit不会调用AFAIK。)