为啥自动布局约束不起作用?

Posted

技术标签:

【中文标题】为啥自动布局约束不起作用?【英文标题】:Why auto layout constraints not working?为什么自动布局约束不起作用? 【发布时间】:2014-05-21 12:39:25 【问题描述】:

我在 IB 中设置约束,例如

但是当我在 iPhone4 上运行应用程序时,它显示

为什么最后三个按钮在 iPhone4 屏幕上没有正确显示?我的约束有什么错误吗? 编辑:- 这是我的视图层次结构:- UITabbarControlle -> UINavigationController -> UIViewController 和标签栏控制器是rootviewcontroller

编辑:-仅供参考,屏幕上没有任何约束(基本上自动布局对我不起作用)。

【问题讨论】:

我猜视图是超级视图位于标签栏后面.. 看起来您的 Storyboard 布局为 4 英寸,但您的 iPhone 4 只有 3.5 英寸的屏幕。所以不是自动布局问题。 是的,我总是这样做......这就是自动布局发挥作用的地方。 @RoboticCat 你还有其他想法吗? 我看不到您的所有限制,但是当您设置它们时,您的内容似乎无法在 3.5 英寸的屏幕上显示。如果要保持间距,则需要将每个正方形都设置为width = height,并且每个正方形的高度与其中一个正方形的高度相同。然后通过顶部/底部约束“挤压”该“主”方块的高度来改变它。另外,请注意其他人的 cmets,橙色约束线表示您应该在 Xcode 中查看的问题(Interface Builder 中的左侧视图)。 【参考方案1】:

您在 4 英寸上设计了按钮,但在 3.5 上没有足够的空间容纳所有按钮。

一种方法是在视图控制器的视图上放置滚动视图并在滚动视图上添加按钮。您必须在滚动视图上添加约束,以固定在每一侧(没有宽度/高度)。

然后抓住所有按钮并在每一侧和尺寸上添加约束,因此它们将被固定

另一方面,如果您有足够的空间让所有按钮适应 3.5' 且没有任何顶部/底部边距,则可以在 UIView 中添加按钮(而不是滚动视图)。将按钮放在视图中并在该视图上设置固定宽度/高度。将视图居中,它将保持他的大小(两个屏幕尺寸上的按钮都在里面)

【讨论】:

我根本不想要滚动视图,而且 3.5 英寸屏幕有足够的空间可以容纳所有按钮。 我已经编辑了我的答案,一会儿可以添加截图【参考方案2】:

你的约束有问题,你必须更新它们。

如下图所示:

完成后,您会看到按钮下方的橙色线条变为蓝色。

希望对你有所帮助!

【讨论】:

PS:您可以选择先选择按钮,然后单击更新约束,或者单击更新视图控制器中的所有约束。 更新约束确实更新了画布中的约束【参考方案3】:

您的视图可能在 UIScrollView 内,这将扩展您的总内容高度。它与视口的绝对高度无关。

但是,您期望什么?如果您的理论方法可行,您的 3 个按钮将覆盖到下一个按钮。

您需要做的是将所有按钮相互连接,并为视图提供顶部和底部布局的顶部和底部约束。您可能需要将视图调整为全屏,而不是延伸到底部。

提示:只要是“黄色”,您就需要添加更多约束。

【讨论】:

不,不希望按钮相互重叠,我只展示了底部按钮的约束。 你固定每个按钮的大小了吗?您可能需要在空间约束中添加一个不太相等的约束

以上是关于为啥自动布局约束不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

动画后自动布局约束不起作用[重复]

为啥这个 UIScrollView 自动布局不起作用?

自动布局在 centerX-centerY 上不起作用

为啥我的 UILabel 的 AutoLayout 不起作用

Swift UIView 小部件自动布局不起作用

Swift 自动布局在 Xcode 9.3 中不起作用