Swift Autolayout:如何为计时器标签设置等距上下约束实现居中
Storyboard约束实现方案
以下两种方案都可以满足需求,按需选择即可:
方案一:通过垂直居中倍数约束实现(更简洁)
- 先固定名称标签(timer 1)的位置:给它添加底部到cell内容视图底部、左右边距、高度/宽高相关的约束,确保它的位置不会发生偏移。
- 选中计时器标签(显示00:00的标签),先添加「水平居中于内容视图」的约束,按需添加宽高约束固定标签尺寸。
- 按住Ctrl拖动计时器标签到cell的内容视图顶部,松开后选择「Center Vertically in Container」,生成垂直居中约束。
- 双击打开该约束的设置面板,将「Second Item」的取值从
Content View.Center Y修改为timer 1.Top,再把「Multiplier」参数设置为0.5,约束生效后计时器就会始终处于cell顶部和timer1标签顶部的正中间。
方案二:通过对等间距约束实现(更直观)
- 同样先固定名称标签(timer 1)的所有必要约束,确保它的位置稳定。
- 选中计时器标签,添加「水平居中于内容视图」的约束,按需添加宽高约束。
- 按住Ctrl拖动计时器标签到内容视图顶部,选择「Top Space to Container Margin」,设置约束值为
>= 8(数值可以按需调整,只要是最小值即可)。 - 按住Ctrl拖动计时器标签到名称标签顶部,选择「Vertical Spacing」,同样设置约束值为
>= 8。 - 同时选中刚才创建的两个上下间距约束,在右侧尺寸检查器中勾选「Equal」选项,两个约束的数值会始终保持相等,即可实现计时器标签上下间距一致、居中显示的效果。
注意事项
- 所有约束都要绑定到cell的
Content View,不要直接绑定到cell本身,避免cell复用时出现约束错乱问题。 - 如果计时器标签的尺寸会随内容动态变化,可以不用加固定宽高约束,只需要将它的内容拥抱优先级、抗压缩优先级设置为高于间距约束即可。
内容的提问来源于stack exchange,提问作者user17420428
相关产品推荐
相关产品推荐

