约束的奇怪行为,iOS8

Posted

技术标签:

【中文标题】约束的奇怪行为,iOS8【英文标题】:Strange behavior of constraints, iOS8 【发布时间】:2015-05-11 10:29:05 【问题描述】:

我在 superview 上有两个根视图。

我从代码中添加的所有视图和约束。顶视图有 H:|-0-[view]-0-|。相同的 vfl 代码有底视图。接下来,俯视图从上到上,从下到上第二个视图,第二个底部到底部。代码是V:|-0-[topView]-0-[secondView]-0-|。

第二个视图具有固有高度,因此两个视图的高度取决于此值。当我更改底视图高度和动画 layoutIfNeed 对我来说一切正常。 接下来,底视图有一些子视图。底部是简单的视图容器,顶部是按钮。它们都连接到左/右,如 H:|-0-[view]-0-|。底部视图也具有固有高度,因此它们像外部视图一样垂直连接,没有(!)将按钮附加到超级视图的顶部(V:[button]-0-[secondView]-0-|)。第二个视图是从下到下附加的,但是当我动画改变这个容器的高度时,它的子视图在 ios 8 上排在首位。

视图层次结构是

约束:

H:|-0-[topView]-0-|
H:|-0-[bottomView]-0-|
V:|-0-[topView]-0-[bottomView(110)]-0-|

H:|-0-[buttonBackCamera]-0-|
H:|-0-[grayView]-0-|
V:[buttonBackCamera]-0-[grayView(85)]-0-| //here is constraint, that MUST attach grayView to bottom. 

在调试时,我注意到,该约束已附加,处于活动状态并且它必须工作,但是 :( .

对此有什么想法吗?

更新

我在 iOS 8.3 上检查过,一切正常。

【问题讨论】:

您的 cmets 中的 secondView 是什么?那是您图表中的底部视图吗?并且是 secondView / bottom view 的按钮子视图,还是它们处于同一级别?您在控制台中看到任何约束警告吗? 视图层次结构类似于monosnap.com/image/kxXIv3pPlmhWLWcIrCsPIBeFIPuVmw 控制台中没有任何警告 您可能应该使用该层次结构更新您的问题并提及您在那里的限制,目前有点难以理解 您是否将translatesAutoresizingMaskIntoConstraints 设置为NO?否则,自动调整大小的蒙版将创建额外的约束。您是使用frame 还是通过更改constant 上的constraint 来设置高度动画? 【参考方案1】:

确保底部视图包含从Leading to superview、Trailing to Superview 和Bottom to Bottom Guide 的约束。 如果您仍然遇到任何问题,请继续,

-(void)viewWillLayoutSubviews

  [self.view layoutIfneeded];

【讨论】:

我已经检查过了。我试图布局超级视图和底部子视图。 layoutIfNeeded 后底部子视图没有布局,所以我尝试使用 layoutSubviews。反正没有结果。底部子视图附加到它的超级视图底部,它不附加到底部指南 您是否提供了任何顶部约束..? 我不明白你的问题。你能改写一下吗?你说的是什么层次,什么观点? 你能分享一下约束的截图吗? 我正在使用 vfl。没有 IB。【参考方案2】:

我认为我没有完全解决问题,但我建议您检查所选的尺寸等级以及每个启用的约束的尺寸等级。

【讨论】:

尺码等级被禁用。所有约束都是从代码中添加的。

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

垂直空间约束奇怪的行为

iOS - 使用滚动视图的奇怪约束

约束动画问题

无法在 iOS8 自定义键盘中获得约束

奇怪的 iOS 8 自动布局问题

ios8 swift:我如何访问/编辑/删除默认/私有 inputAccessoryView 高度约束'_UIKBAutolayoutHeightConstraint'