Xcode 13.0升级后出现无因布局歧义警告的问题求助
Xcode 13.0 升级后 TableView 特定 Cell 出现无意义布局歧义警告(不影响实际运行)
升级到Xcode 13.0后,我的项目突然冒出一堆Position and size are ambiguous for ...和Width and horizontal position are ambiguous ...的布局警告——但我完全没修改过项目代码或Storyboard,之前用旧版本Xcode时从来没见过这些警告。更奇怪的是,这些涉事的Cell在真机和模拟器上显示都完全正常,我反复检查过所有约束,逻辑上都是正确的。
诡异的临时“修复”现象
我还发现一个完全摸不着头脑的情况:修改TableView顶部某个无关Cell里Label的名称后,大部分警告会消失,但只要重启Xcode,这些警告就又回来了;用Update Frames功能也完全解决不了问题。
详细更新信息
更新1(2021.10.20)
我打开Main.storyboard的源码查看,发现涉事对象的属性被标记为ambiguous="YES",但关闭Xcode手动删掉这个标记后,重启Xcode它又会自动加回来。另外我注意到,所有警告都指向TableView中第16个及以下的Cell(横跨4个Section),我甚至怀疑是不是TableView或Section对Cell数量有什么隐藏限制?
更新2(2021.10.21)
经过更多测试还是没找到根因,补充几个关键细节:
- 问题出在一个包含7个Section的TableView Controller,各Section的Cell数量分别是:2、2、1、12、1、3、2。警告只出现在第4个Section的第11个Cell(也就是从顶部数第16个Cell)及之后的Cell上。
- Xcode界面的警告/错误显示完全矛盾:项目Tab栏右上角显示黄色警告标记,顶部目标/设备栏右侧显示10条警告,打开Issue navigator也是10条警告;但涉事TableView Controller右侧显示红色错误标记,点进去看却是16条错误(不是警告)。
- 尝试通过
TARGETS > Build Settings > IBSC_WARNINGS关闭警告没用;手动删除Main.storyboard里的ambiguous="YES"标记(已经备份了文件)也没用,我最疑惑的就是Xcode为什么会自动给这些对象加上这个标记。 - 用
Add missing constraints功能毫无反应,我手动加的约束逻辑上都是正确的。 - 修改涉事Cell(比如第16个Cell)里Switch的Document label(在Identity inspector里)后,警告总数直接变成0——但这个标签只是Xcode Storyboard里的标识,完全不会影响App的UI,这种无关修改为什么能消除警告?
- 如果用上面的方法把警告降到0,重启Xcode后又会变回10条警告。
- 第16个Cell是从完全没有警告的第15个Cell复制粘贴过来的,但它却产生了警告。
- 用视图调试(Frames、Alignment rectangles)看,真机和模拟器上的界面都完全正常,App运行时布局完全符合设计,这些警告看起来完全不影响实际功能,而且Xcode 13.0之前从来没出现过。
已尝试的无效解决方案
- 手动检查并确认所有约束逻辑正确
- 使用
Update Frames功能 - 手动删除Storyboard源码中的
ambiguous="YES"标记 - 通过Build Settings关闭IB相关警告
- 使用
Add missing constraints功能 - 修改无关控件的标识临时消除警告(重启后失效)
目前网上关于这个问题的有效解决方案特别少,很多开发者都是选择忍了,但我希望能找到问题的根本原因,修复掉这个潜在隐患,有没有大佬遇到过类似的情况?
内容的提问来源于stack exchange,提问作者geohei
相关产品推荐
相关产品推荐

