【发布时间】:2021-11-21 03:31:49
【问题描述】:
启动 Xcode 13.0 后,我在应用程序上收到大量 Position and size are ambiguous for ... 和 Width and horizontal position are ambiguous ... 布局警告,几天前在以前的 Xcode 版本中没有出现(Xcode 升级后我没有更改任何内容)。提及的对象在设备和模拟器上正确显示。仔细检查,发现所有约束似乎都已正确设置。
上面的例子非常简单。我真的不明白警告的原因可能是什么。
更奇怪的是......当我在 tableview 顶部某处更改标签的名称时,大多数警告(不是全部)都会消失。此标签位于与生成警告的对象完全无关的单元格中。重启 Xcode 后,警告又回来了。
另外Update Frames 也没有解决问题。
这是一个 Xcode 错误还是我错过了什么?
--- 更新 1 (20.10.2021) ---
-
我注意到
Main.storyboard为相关对象显示ambiguous="YES"。手动删除(当 Xcode 13.0 关闭时)没有帮助。ambiguous="YES"在下一次 Xcode 启动时返回。 -
我注意到所有警告都指向对象的约束,位于 tableview 单元格 16 之后(分布在 4 个部分)。这不可能是巧合。
表格视图和/或部分中允许的单元格数量是否有任何限制?
--- 更新 2 (21.10.2021) ---
更多细节。经过大量测试和阅读仍然没有解决方案。
整个问题是关于一个 tableview 控制器,它有 7 个部分和可变数量的单元格(2、2、1、12、1、3、2)。警告仅在第 4 节中的第 11 号单元格之后显示,因此第 16 号单元格从顶部开始计数(不考虑节边界)。
Xcode 在变更/影响关系方面显示出许多不一致之处,如下所示。
-
有一个禁用警告的设置(TARGETS > Build Settings > IBSC_WARNINGS),但这不会改变显示的警告数量。在
Main.storyboard文件中手动(折旧)删除ambiguous="YES"没有帮助。我认为尝试一下(在备份Main.storyboard之后)没有什么不好的。这个问题可能归结为为什么 Xcode 首先将模棱两可的标签添加到Main.storyboard。 -
项目在标签栏右上角显示一个黄色警告符号,以及目标/设备栏右侧(Xcode 窗口的最顶部)的 10 个警告。单击该选项会打开显示 10 个警告的问题导航器。然而,情节提要在相关 tableview 控制器的右侧显示一个红色错误符号。在这个列表中,只有错误,没有警告(所以现在是错误还是警告?)。这个数字是 16 个错误,而 Xcode 顶部栏中的警告数显示 10 个警告。尝试
Add missing constraints不会做任何事情。我手动添加的约束显然是正确的。请参阅 OP(重置设置)的简单示例。 Xcode 窗口中存在大量相互矛盾的信息。 -
更改属于发出警告的单元格(例如单元格#16)的开关的文档标签(身份检查器),警告总数降至 0!此标签仅由 Xcode 故事板界面使用,不会显示在应用程序 UI 上。那么为什么它会对约束警告产生影响呢?不相关的变化解决了问题?
-
如果由于上述 (3.) 警告计数为 0,则重新启动 Xcode 会使所有返回到之前的状态 = 10 个警告。为什么设置更改后出现 0 个警告,然后重启后又出现 10 个警告?
-
如前所述,混乱始于 16 号牢房。然而,这个是来自单元格 #15 的复制/粘贴,不会产生任何警告。
-
查看调试(框架、对齐矩形)正确显示界面 - 在设备和模拟器上。
当应用程序运行时,布局实际上完全按照设计显示。这些警告似乎对实际操作没有任何影响。他们也没有显示以前的 Xcode 13.0。
网上有很多关于布局模糊的问题,但很少有解决方案。大多数时候,作者只是接受滋扰而辞职。我的目的是了解为什么会发生这些问题并解决潜在的隐藏问题(如果有的话)。
【问题讨论】:
-
不,抱歉,很遗憾没有。它没有解释为什么非常简单的
Reset settings按钮示例会发出警告。也没有提到不相关的标签名称更改修复。 -
你没有帮助我们帮助你。你还没有告诉我们任何事情。你甚至没有告诉使用它是什么类型的对象,这是模棱两可的。当您运行应用程序并显示所谓的模棱两可的视图并暂停到视图调试器时,您会看到什么?运行时是否存在模棱两可的视图?
-
同时将情节提要编辑为 xml 只是愚蠢的。如果您想关闭情节提要视图的歧义警告,在界面中有一个复选框。
-
@matt 明天再给我,我会提供详细信息(现在没时间)。但这就像我在 OP 中写的一样简单。它是关于标签、按钮、开关……以及表格视图单元格的所有内部内容视图。布局本身再简单不过了。在顶部,单元格 16(警告开始的地方)是单元格 15 的复制/粘贴。所有这些都超级简单,但是一旦我通过阈值单元格 #16,警告就会显示每个对象,无论它是什么。我明天编辑 OP……除此之外,我认为结束这个问题不是一个好主意,因为它可能指向 Xcode 错误。它可能会帮助其他人。
标签: swift xcode uitableview xcode-storyboard