状态栏重新出现时视图控制器不会自动调整大小

Posted

技术标签:

【中文标题】状态栏重新出现时视图控制器不会自动调整大小【英文标题】:View controller not autoresizing when status bar reappears 【发布时间】:2012-11-13 22:30:16 【问题描述】:

在状态栏最初可见的情况下,我添加了一个子视图并隐藏了状态栏:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
[myController.view addSubview:anotherController.view];

在这个视图中,有一个按钮可以切换状态栏的可见性,但是当我再次将 statusBarHidden 设置为 NO 时,视图控制器的视图不会自动调整大小以考虑状态栏,并且作为结果视图被下推并被截断 20px。我已经为视图设置了所有适当的调整大小蒙版,还尝试了自动布局,但似乎都不起作用。我希望我的视图在显示/隐藏状态栏时自动调整大小,而无需手动设置其框架。

更新

我没有将其添加到根视图控制器的视图中,而是将其推送到导航控制器的堆栈中,并隐藏了状态栏和导航栏。然后我让用户选择只切换状态栏。但是问题依然存在,当状态栏重新出现时,视图被推送并切断了 20px。

但是当我旋转设备时,一切都在它的位置 - 只有当我在状态栏被隐藏后旋转设备时。

【问题讨论】:

【参考方案1】:

myController 是如何添加到窗口中的?假设 myController 是你的窗口的 rootViewController,那么这个控制器在显示/隐藏状态栏时应该正确调整大小。 anotherController 的视图应该以另一种方式添加,而不仅仅是添加它的视图。但是,如果您为该视图提供正确的调整大小标志,它也应该调整大小。但是,如果您将该控制器推送到导航控制器上,或者将其设置为新的 rootViewController 会更好。

【讨论】:

这很奇怪,因为它被添加到根视图控制器的视图中。我喜欢您关于将其推送到导航控制器上的建议,但问题仍然存在(请参阅我的更新答案)。

以上是关于状态栏重新出现时视图控制器不会自动调整大小的主要内容,如果未能解决你的问题,请参考以下文章

在线编辑文本字段时,UITableViewController 不会自动调整其表格视图的大小和位置

通话状态栏更改时查看调整大小[重复]

使用自动布局进行编辑时在表格视图中调整子视图的大小

如何动态调整导航栏中的标题大小

Xcode 5:自动调整大小

旋转到横向时自动调整 UINavigationBar 的大小