如果我在使用我的应用程序时接到电话, View 会向下移动一点以便为顶部的通话状态栏腾出空间。
调用结束后, View 将保持这种“已更改”状态。如何强制应用程序自行调整大小?目前我必须终止该应用程序并重新启动。
最佳答案
您是否有覆盖 -layoutSubviews
的自定义 View ?
根据我的经验,这意味着您有一个 View 使用 -layoutSubviews
进行自定义布局,但不会在适当的时间调用 -setNeedsLayout:
;一般setting the frame does not force a layout (自动布局的处理方式不同)。
在覆盖 -layoutSubviews
的任何 View 中,尝试以下操作:
-(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 它不会被 UIKit 调用,除了 UIScrollView
。)
关于iOS应用程序布局在电话后发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15263672/