如果我在使用我的应用程序时接到电话,则视图会降低一点,以便为顶部的 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调用。)

10-07 18:54
查看更多