【发布时间】:2020-06-04 17:10:44
【问题描述】:
有一个堆栈视图,其中包含三个标签并具有以下约束:
- 高度 = 300
- 顶部 = 安全区域 + 50
- 尾随/前导 = 0
以及以下属性:
- 轴 -> 垂直
- 对齐 -> 居中
- 分布 -> 等间距
标签 3(蓝色)有一个变化:对于紧凑型高度尺寸类,已安装属性被禁用(通过属性检查器配置)。这使它隐藏在 iPhone 上的水平方向:
当应用启动时,所有标签在屏幕上都有正确的位置。旋转到水平方向并返回后,Label 3 放置在 Stack View 的左上角,而其他标签正确对齐:
Xcode View Hierarchy 调试器显示标签 3 重新出现后没有任何 UIStackView 相关约束,并且旁边的警告显示“Position is ambiguous”:
标签 3 似乎在被隐藏并再次显示后失去了与 Stack View 相关的所有约束。
【问题讨论】:
-
为什么要直接在
UIStackView中添加约束?如果有的话,您应该将它们添加到UIView内的UIStackView内。但这会导致很多问题。你真的应该嵌套UIStackView。 -
目前的约束只是定义堆栈视图本身的位置和高度的约束。据我了解,调试器屏幕截图上可见的约束是由框架动态添加的。我不明白为什么应该有嵌套的堆栈视图,而不是一个具有 3 个子标签的单个视图。
-
我的错,我以为你出于某种原因手动向所有 UILabel 元素添加约束。
-
@raindev - 试着澄清你在做什么......你说 “标签 3(蓝色)有一个变化:如果高度特征是紧凑的,它就没有安装,使它隐藏在iPhone 上的水平方向” --- 你设置了什么约束来“让它隐藏”?显示包含所有约束的 Storyboard 布局。
-
@DonMag,通过 Attributes Inspector 配置的 Compact 高度尺寸类的 Installed 属性有一个变体,更新了问题中的措辞。还添加了故事板屏幕截图。我希望它能把问题弄清楚。
标签: ios autolayout uistackview