iOS应用程序布局在电话后发生变化

标签 ios layout resize phone-call

如果我在使用我的应用程序时接到电话, 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/

相关文章:

objective-c - 将文本从 uitextview 绘制为 pdf

ios - 两个应用试图在同一端口上启动 HTTP 服务器

jQuery - 根据值的宽度调整表单输入的大小?

ios - 如何在ios中知道设备连接到哪个网络主机

html - 具有动态高度 CSS 的封面图像

javascript - 流畅的菜单导航

R 没有在layout_with_sugiyama 中采用参数hgap

c++ - 最小化时 DirectX 崩溃

javascript - 如果内容未填满窗口,动态调整 div 高度以将页脚保持在底部

ios - 按钮的图像在表格 View 中变得更长