通过电话后iOS应用布局发生了变化

时间:2013-03-07 05:20:53

标签: ios layout resize phone-call

如果我在使用我的应用程序时接到一个电话,那么视图会有所下降,为顶部的通话状态栏腾出空间。

一旦通话结束,视图将保持此“已更改”状态。如何强制应用重新调整大小?目前我必须杀死该应用并重新启动。

1 个答案:

答案 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。)