iOS 自动布局错位视图的错误

Posted

技术标签:

【中文标题】iOS 自动布局错位视图的错误【英文标题】:iOS auto-layout misplaced views off-by-one bug 【发布时间】:2014-07-15 22:13:12 【问题描述】:

我有两个按钮,每个按钮应该占据视图宽度的一半。

我有:

左侧按钮到超级视图的前导空间约束 从左侧按钮到右侧按钮的尾随空间限制 超级视图右侧按钮的尾随空间约束 按钮的等宽限制

我得到错位的视图:

Button 1 
  Expected: width=161 
  Actual: width=160

Button 2 
  Expected: width=161 
  Actual: width=160

我对垂直也是如此。

当然,320 / 2 = 160,对吧?谁能指出我做错了什么?还是我应该忽略这些警告?

【问题讨论】:

【参考方案1】:

错位的观点似乎确实比要求更多的建议。除非限制被打破,否则您可能没有什么可担心的。

如果您希望警告消失,请尝试选择“更新约束”,因为它们可能缺少一个额外的像素来填充屏幕。

【讨论】:

“更新约束”不会改变任何东西。我同意它没有破裂。我很好奇为什么具有精确像素(点)值的简单布局会导致问题。例如,将 Retina 3.5 英寸外形尺寸分成 4 个相等的空间,顶部的状态栏应为 (480 - 20) / 4 = 115。自动布局似乎计算为 116。【参考方案2】:

您是在 xib/storyboard 中执行此操作吗?如果您通过在两个视图之间进行控制拖动来创建约束,则它们可能是通过将其constant 属性设置为当时视图的偏移量来创建的。选择每个约束并将其 constant 设置为 0 或任何您想要的。

【讨论】:

是的,它们是在故事板中创建的。在按钮宽度设置为总宽度的一半并与两侧的超级视图对齐后,我控制拖动它们。因此,约束确实具有零常数值。我也许能够弄清楚如何使用合适的常量值让警告消失,但恕我直言,它们应该为零。 实际上,宽度警告已经消失了。不知道发生了什么变化......我仍然对高度警告有疑问。 (480 - 20) / 4 = 115 ...错位的观看次数预计为 116。

以上是关于iOS 自动布局错位视图的错误的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局的 IB_DESIGNABLE 自定义视图的错位视图警告和奇怪行为

UICollectionViewCell 子视图的位置错误(自动布局)

在 iOS 应用程序中添加自动布局子视图时高度错误

当项目使用自动布局时,导航控制器无法在 iOS 7 中推送视图控制器

UINavigationController 不使用自动布局 iOS 8 更新大小

iOS 自动布局过程