约束配置相同的两个UITableViewCell在Interface Builder显示差异问题
问题原因
两个cell布局表现不一致的核心原因是约束是否关联Layout Margin的配置不同,和Xcode不同版本创建cell的默认配置差异直接相关:
- UITableViewCell的contentView默认自带左右各10的布局边距(Layout Margin)
- 如果创建leading约束时勾选了
Relative to margin选项,约束数值对应的是「距离contentView布局边距的间距」,而非「距离contentView本身左边缘的间距」- 例如勾选该选项时设置leading=0,控件实际距离contentView左边缘的距离是默认边距10;如果要让控件对齐到contentView左边缘,需要设置leading=-10
- 如果不勾选该选项,约束数值就是控件到contentView左边缘的直接距离
你提到的旧cell就是创建约束时没有勾选Relative to margin,所以设置leading=10就是直接距离contentView左边缘10;新cell默认勾选了该选项,所以需要设置leading=20(10默认边距+10实际间距)才能达到和旧cell相同的显示效果,才会出现纸面约束数值相同但显示效果完全不同的情况。
修复方法
- 选中两个cell的leading约束,在右侧尺寸检查器中查看约束详情,将两个cell的
Relative to margin选项保持一致(建议统一取消勾选,布局逻辑更直观) - 额外检查contentView的
Preserve Superview Margins和Follow Readable Width配置,确保两个cell的这两个选项状态一致
内容的提问来源于stack exchange,提问作者user339946
相关产品推荐
相关产品推荐

