AutoLayout 奇怪的行为 iOS

Posted

技术标签:

【中文标题】AutoLayout 奇怪的行为 iOS【英文标题】:AutoLayout weird behaviour iOS 【发布时间】:2016-12-27 22:13:57 【问题描述】:

当我推到UIViewControllerB,然后弹回到UIViewControllerA 时,UIViewControllerA 的整个视图应该高出大约 20 像素,然后(我猜在 viewDidAppear 之后)它会移动到它的正常位置。在此期间,我不会以任何方式操纵约束或UINavigationBar 设置。我确实拥有UIViewControllerA 顶部空间到顶部布局指南的所有元素。什么可能导致这种情况?我已经使用了一些故事板,但从未遇到过这样的事情。

【问题讨论】:

嗯,状态栏是20px。状态栏会隐藏吗​​? 不,什么都没有改变,什么都没有 你能提供你的约束的细节吗? 当顶部约束到顶部布局指南时,UIViewControllers 之间的转换有时会出错,出现的视图似乎会跳起来。我设法通过将顶部约束添加到superview 而不是顶部布局指南来修复我的问题(但是我没有使用UINavigationBar,所以它对我有用)。我从来没有弄清楚问题的原因! 【参考方案1】:

尝试在您的viewDidLoadviewDidAppear 中添加view.layoutIfNeeded()

【讨论】:

【参考方案2】:

最新的 XCode 添加了一些新行为。尝试设置UIViewControllerA 的约束,使顶部与UINavigationBar 的底部齐平。

【讨论】:

【参考方案3】:

这是由于删除子视图引起的,我在加载数据时添加到封面屏幕:删除此子视图后,约束更改(这仅发生在此 UIViewController 上,其他 UIViewControllers 与此子视图很好) .我已经通过这样做修复了它:

self.stopLoading() //removes subview
self.view.layoutIfNeeded()

【讨论】:

以上是关于AutoLayout 奇怪的行为 iOS的主要内容,如果未能解决你的问题,请参考以下文章

使用Xcode 6中的AutoLayout约束模拟方面适合行为

如果为目标视图指定了初始帧,为啥 AutoLayout 不遵守约束?

在AutoLayout - iOS中,约束计数总是变为零

显示模态后移动视图 - 可能与 AutoLayout 相关

不使用 AutoLayout 的 UITableView 动态行高

AutoLayout:在代码中居中两个视图会导致约束异常?