【发布时间】:2013-07-11 20:25:07
【问题描述】:
我在 iOS (6.x) 上遇到了 AutoLayout 的问题,我不知道如何解决。
我有一个带有 UILabel 和 UITextField 的 UITableViewCell,如下所示:
+------------------+
| label textField |
+------------------+
我想使用 AutoLayout 来布局这些,但有一个警告。 UILabel 在纵向模式下应该是 100 点,在横向模式下应该是 175 点。
即在视觉格式语言中,这将类似于以下内容
Portrait:
|-[label(100)]-[textField]-|
Landscape:
|-[label(175)]-[textField]-|
因此文本字段将占据单元格视图的其余部分。
当然,我可以通过覆盖willRotateToInterfaceOrientation:duration: 来解决这个问题,并找出当前显示的单元格,然后在它们上调用updateConstraints,这样我就可以根据方向更新标签的宽度,但这并不似乎是要走的路。首先,然后挂钩到旋转动画似乎很难或不可能。其次,我的感觉告诉我,我可以通过优先级和不平等来解决它。我会为标签添加类似[label(>=100,<=175)] 的内容,但随后我需要做其他事情,因为否则标签将始终调整为特定大小(100 或 175)。
我以为我已经修复了它:我已将标签的内容拥抱优先级设置为 200,在文本字段上设置了宽度应至少为 152 的约束,然后它会执行我想要的操作,除非我举例启用表格视图的编辑模式,因为这样文本字段就不能再有 152 点宽(没有足够的空间)。输入这个任意的“152”也感觉不像是要走的路。
那么有人对我如何解决这个问题有任何建议吗?
【问题讨论】:
-
见this answer。这有点复杂,但想法是一样的:每当视图加载或旋转时,约束都会根据方向发生变化。
-
谢谢,这确实有效:)
标签: iphone ios objective-c autolayout