Swift中UITableView运行时报Unable to simultaneously satisfy constraints错误怎么办
能不能直接忽略这个报错?
不建议直接忽略。你现在看不到布局异常是因为Auto Layout自动选择打破了宽高比约束,差值只有零点几像素,肉眼不可察而已。长期留着这个冲突一方面会增加列表布局的计算开销,可能导致滚动掉帧;另一方面后续如果调整行高、适配新设备尺寸、修改cell内其他控件约束时,很容易出现不可预期的排版错乱。
冲突原因是什么?
从报错日志就能直接算出问题根源,本质是UITableView自动计算行高的浮点精度误差:
- 系统给当前cell的封装宽度是390,所以你的imageView宽度=390*0.55=214.5
- 按照1.6的宽高比约束,imageView高度=214.5/1.6≈134.06
- 加上stackView距离cell上下各10的边距,计算出来的cell总高度应为134.06+20=154.06,但系统自动生成的cell封装高度是154.333,二者存在0.273的差值,就触发了约束冲突。
怎么修复?
操作非常简单:把你给imageView设置的1.6宽高比约束的优先级从默认的1000(必选)下调到999(高优先级)即可。
系统生成的UIView-Encapsulated-Layout-Height约束默认是必选优先级,你把自定义的宽高比约束优先级降低一点,出现精度误差时系统会优先满足自身的封装高度约束,宽高比的偏差仅有零点几个像素,完全不影响视觉表现,也不会再抛出冲突报错。
内容的提问来源于stack exchange,提问作者mendokusai
相关产品推荐
相关产品推荐

