【问题标题】:Xcode UITableViewCell duplicate changes position and dimension of included objectsXcode UITableViewCell 重复更改包含对象的位置和尺寸
【发布时间】:2020-06-05 09:13:24
【问题描述】:

Xcode 版本 11.5 (11E608c)。我有一个包含多个部分的 UITableView。在一个部分中,我将一个单元格(包括约束)复制(复制/粘贴)到下面。这个新单元格包含的标签前导边界比原始单元格左 8 点,因此未垂直对齐,如下面的屏幕截图所示。这绝对不是我想要的。

但是,当我在模拟器和实际设备中运行项目时,下载周期 3 和 4 的左边界正确对齐。

下载周期标签的 Xcode 视图尺寸为:
下载第三期:X=16, Y=11, Width=324, Height=22
下载期四:X=8, Y=11, Width=333, Height=22

除了上述之外,来自身份、属性和大小检查器的所有数据对于两个单元格都是相同的(下载周期 3 和 4)。

如果我将下载时间段 4 的值调整为下载时间段 3 的值,我会收到下载时间段 4 的 Misplaced views 警告:
Expected x=8, width=333
Actual x=16, width=324

不涉及可能干扰布局的代码。

这里我使用的约束(下载周期 4 显示,下载周期 3 相同):

这可以是任何东西。从 Xcode 错误到我最后的愚蠢错误。底线是,我没有找到问题的根源。我想了解为什么一个单元格的复制会改变所包含对象的尺寸和位置,以及为什么情节提要在模拟器和实际设备上显示错位而不是正确对齐。我看不出这里有什么问题。

----- 更新 05.06.2020 14:00 UTC -----

我检查了 Main.storyboard xml 文件,将下载周期 3 和 4 的相关部分提取到单独的文件中,然后运行 ​​diff 命令。除了 ids,其他都是一样的!

手动将下载周期 4 调整为 x=16,宽度=324 后,我在前导边界处看到橙色虚线。这意味着我的约束与我的实际视图不匹配。似乎(?!)Superview 或 Margins 的边界已从一个单元格更改为另一个单元格。 AFAIK 这是不可能的吗?

最重要的是,我注意到下载周期 4 以下的所有单元格(甚至通过新部分)都有相同的问题。 Superview + 边距上的前导/尾随边界左右多出 8 个点(总共 16 个)。

----- 更新 06.06.2020 15:30 UTC -----

进一步测试 - 当我手动更改下载周期 4 表格视图单元的布局边距(更改为 Fixed)时,标签边界正确,情节提要中没有橙色虚线,没有 Misplaced views 警告消息,情节提要演示相同到模拟器和实际设备演示。总而言之......一切都应该是这样!

提醒一下,问题始于两个持有下载周期 3 和 4 的表格视图单元格(参见上面的屏幕截图)。假设问题来自错误的边距,这就是我所做的:

表格视图单元格(下载周期 3 - 默认,未更改)
尺寸检验员
布局边距:Automatic

表格视图单元格(下载周期 4 - 已更改)
尺寸检验员
布局边距:Fixed
Left : 16(原为 8)
Top : 8.
Bottom : 8.
Right : 16(原为 8)

这证实了我最初的假设,即两个表格视图单元格之间的边距发生了某种变化。

这是一个已知的错误吗?
Xcode 是否使用某种缓存来生成故事板?

【问题讨论】:

    标签: ios xcode uitableview constraints


    【解决方案1】:

    我的建议是不要复制和粘贴单元格,而是从库中拖放一个单元格并从头开始添加约束。或者您可以选择复制的单元格并清除所有约束并再次添加它们。

    【讨论】:

    • 复制/粘贴功能是在 Xcode 中实现的,所以它应该可以工作。我在单元格中有很多对象,因此我不想从头开始实现所有对象。除此之外,看看我的更新(05.06.2020 14:00 UTC)。我比较了两个单元格的 xml 标签。一切都是 100% 相同的。关于清除和添加约束……这就是我一开始就已经做的事情。没有快乐...
    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多