Xcode 12.5.1下Swift开发Stack View中Bar Progress View显示异常问题
Xcode 12.5.1 下Bar Progress View在Interface Builder的布局异常修复方案
你遇到的是Xcode 12.x版本的已知Interface Builder渲染bug,运行时UIKit渲染逻辑正常,仅IB预览表现异常,可通过以下方法修复:
- 首先消除约束冗余:你当前给Progress View同时添加了
leading、trailing和centerX约束,属于冗余约束,会导致IB计算布局时出现歧义。直接删除Progress View.centerX = centerX约束,保留以下约束即可:Progress View.leading = superview.leading + 10 superview.trailing = Progress View.trailing + 10 Progress View.height = 10 - 调整Stack View子视图结构实现位置需求:你的Stack View使用
Fill的Distribution规则,会优先拉伸内容优先级最低的子视图填充剩余空间。要让Progress View位于Stack View下半部分,可在Bar Timer View和Progress View之间插入一个空白的UIView作为占位spacer,将spacer的垂直方向Content Hugging Priority设置为250(低于另外两个业务视图的优先级),Stack View会自动拉伸spacer填充剩余空间,把Progress View顶到下半部分位置。如果需要精确控制位置,可以给spacer添加固定高度或者比例约束即可。 - 修复IB样式渲染异常:Xcode 12对Bar样式的Progress View有默认边距计算bug,可通过两种方式修正IB预览表现:
- 在Identity Inspector的
Runtime Attributes中添加属性:key为progressViewStyle,类型为String,值为UIProgressViewStyleBar,强制IB识别样式的布局规则 - 直接在ViewController的
viewDidLoad中添加代码指定样式:progressView.progressViewStyle = .bar
- 在Identity Inspector的
- 强制刷新IB布局:如果修改后IB仍显示错位,选中对应Stack View后点击顶部菜单栏
Editor → Refresh All Views,强制IB重新计算所有视图布局即可。
内容的提问来源于stack exchange,提问作者Kosh
相关产品推荐
相关产品推荐

