iOS8 中的 UIViewController 自动布局

Posted

技术标签:

【中文标题】iOS8 中的 UIViewController 自动布局【英文标题】:UIViewController auto layout in iOS8 【发布时间】:2014-11-14 16:15:45 【问题描述】:

将设备更新到 ios 8 后,会出现下一个布局问题。

我有一个 UITabBarController,它包含两个嵌入在 UINavigationController 中的 UITableViewController。这是主视图。

StoryBoard 中还设计了几个 UIViewControllers(未嵌入在 UINavigationViewControllers 中)。这些是次要观点。所有这些都将“在推送时隐藏底部栏”设置为“是”。设置约束来确定布局。

所有次要视图都显示为: UIStoryboard* sb = [UIStoryboard storyboardWithName:STORYBOARD_NAME bundle:nil]; UIViewController* secondaryView = [sb instantiateViewControllerWithIdentifier:_name]; [navigationController pushViewController:secondaryView animated:YES];

在 iOS7 上一切正常。 但是在 iOS8 中出现二级视图控制器时会出现一些问题:

    所有固定到底部的 UIView 会在错误的位置显示片刻,然后“跳转”到正确的位置。看起来第一个位置的计算包括底栏(由于“按下时隐藏”而隐藏) 如果有 UITableView 作为子视图:顶部固定的子视图再次显示在错误的位置片刻,然后“跳转”到正确的位置。看起来第一个位置的计算不包括导航栏的大小。如果我从控制器中删除 UITableView - 一切正常(第 1 页除外)

尝试为辅助视图设置模拟指标 - 没有帮助。

这些“跳跃”真的很烦人。非常感谢您的任何建议。

【问题讨论】:

【参考方案1】:

从情节提要中隐藏标签栏时,我遇到了类似的跳跃问题。 确保您的底部子视图固定到超级视图而不是底部布局约束。

您必须从menu - Editor - Pin - Bottom Space to Superview 执行此操作,因为默认情况下Interface Builder 中的Auto Layout 菜单固定到Bottom Layout Constraint

【讨论】:

thx,问题确实出在 pin 上,但我也删除了 UITabBarController 并添加了简单的 UIViewController 和 UITabbar【参考方案2】:

据我所知,iOS 8 的标签栏控制器与导航栏控制器混合存在问题。删除其中一个将使其再次正常运行。

【讨论】:

感谢您的回复,但我两个都需要。

以上是关于iOS8 中的 UIViewController 自动布局的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS8 中未调用 UIViewController 设备旋转委托方法

UIViewController 动画过渡在 iOS8 中失败

等效 [UIPopoverController setContentViewController:(UIViewController *) 动画:(BOOL)];适用于 iOS8

尝试在 NavigationController 中推送多个 UIViewController 时出现 iOS8 问题

当键盘出现在 iOS8 的 iPad 上时,向上移动模态呈现的 UIViewController

在 iOS 8 中禁用 UIViewController 的旋转