Xcode 8布局约束问题:双按钮无法按屏幕半宽正确缩放
解决Xcode 8中按钮平分屏幕宽度的布局问题
嘿,我太懂这种跟布局约束死磕的头疼感了!之前在Xcode里折腾平分宽度的按钮也踩过不少坑,给你两个实用的解决方案,亲测在Xcode 8里有效:
方法一:用UIStackView(推荐,零脑暴)
这是最省心的方式,Xcode 8已经原生支持栈视图了:
- 把你的“faucet”和“wallet”按钮拖到目标父视图里,同时选中两个按钮
- 点击Xcode右上角工具栏里的「Embed In」按钮(就是那个叠在一起的方块图标),选择
UIStackView - 选中刚创建的栈视图,打开右侧的「Attributes Inspector」(属性检查器):
- 把「Axis」设为Horizontal(水平方向)
- 「Distribution」选择Fill Equally——这一步是核心,它会让两个按钮自动平分栈视图的宽度
- 「Alignment」设为Fill,「Spacing」可以设为0(或者你想要的按钮间距)
- 最后给栈视图添加父视图约束:比如你想让按钮栏固定在底部,就给栈视图加「Bottom」「Leading」「Trailing」约束,再按需加一个「Height」约束;如果是放在顶部,就加「Top」「Leading」「Trailing」约束就行
方法二:手动添加约束(适合搞懂底层逻辑)
如果你想自己控制每一步,那就手动加约束:
- 先给“faucet”按钮加约束:「Leading to Superview Leading」(左边缘对齐父视图左边缘)、「Top to ...」(根据你的布局需求设置顶部位置)、「Height」(固定按钮高度)
- 给“wallet”按钮加约束:「Trailing to Superview Trailing」(右边缘对齐父视图右边缘)、「Top to faucet's Top」(顶部和faucet按钮对齐)、「Height Equal to faucet's Height」(高度和faucet一致)
- 关键操作:同时选中两个按钮,右键拖拽其中一个到另一个,选择「Equal Widths」(等宽约束),这会让两个按钮宽度始终相等
- 最后给两个按钮加间距约束:选中faucet的右边缘,拖拽到wallet的左边缘,设置「Horizontal Spacing」为0(或你想要的间距)
注意事项
- 一定要删掉按钮原本的固定宽度约束!如果之前给按钮加过固定宽度,会和等宽约束冲突,导致布局失效
- 如果出现约束冲突,打开Xcode右下角的「Resolve Auto Layout Issues」按钮,选择「Clear Constraints」先清空所有约束,再重新按上面的步骤来
内容的提问来源于stack exchange,提问作者Bryan Stevens
相关产品推荐
相关产品推荐

