【发布时间】:2014-12-23 06:06:34
【问题描述】:
我们有许多不同的开发者贡献的 iOS 应用。我继续注意到的一个问题是,我们故事板中的视图将移出它们放置的位置或调整大小以使其更小,这在原本适合文本大小的标签上变得非常明显,当标签全部突然截断他们的文字。
我注意到当开发人员没有直接对故事板进行任何编辑时,我们的视图的这些退化出现在提交到我们的 Git 存储库中。他们可能已经在 Interface Builder 中查看了故事板,但没有对故事板进行任何真正的更改。尽管如此,这些更改仍会与他们正在处理的内容一起保存并提交。
当我在负责提交之前和之后的情节提要文件之间进行文本比较时,我看到视图框架发生了一些小的变化,例如:
<rect key="frame" x="203" y="8" width="362" height="29"/>
|
V
<rect key="frame" x="203" y="7.5" width="362" height="29"/>
和
<rect key="frame" x="446.00000170260091" y="7" width="302" height="30"/>
|
V
<rect key="frame" x="446" y="7" width="302" height="30"/>
和
<rect key="frame" x="364" y="3" width="200" height="38"/>
|
V
<rect key="frame" x="363" y="3" width="200" height="38"/>
和
<rect key="frame" x="284" y="7" width="97" height="30"/>
| |
V V
<rect key="frame" x="283" y="7" width="96" height="30"/>
和
<rect key="frame" x="384.00001078580522" y="7" width="101" height="30"/>
| |
V V
<rect key="frame" x="383.00000530853856" y="7" width="100" height="30"/>
在大多数情况下,框架尺寸的数字仅发生少量变化,整数值变化一或浮点值被截断或小数部分发生微小变化。
其他时候,这些值会发生一些变化,例如:
<rect key="frame" x="334" y="3" width="200" height="38"/>
|
V
<rect key="frame" x="331" y="3" width="200" height="38"/>
和
<rect key="frame" x="251" y="7" width="223" height="30"/>
|
V
<rect key="frame" x="251" y="7" width="220" height="30"/>
和
<rect key="frame" x="478" y="3" width="274" height="38"/>
| |
V V
<rect key="frame" x="475" y="3" width="276" height="38"/>
请注意,当开发人员不打算对情节提要进行单一更改时,所有这些示例框架更改均来自同一个示例提交。两个版本的文件之间的 XML 有 269 处差异,所有这些差异都是帧大小或位置的细微变化。故事板 XML 约为 9000 行。
似乎这个问题可能与 IB 使用浮点数和舍入误差有关,而偏离几个像素的差异可能是这些舍入误差在几次打开、解析和重新序列化数据。
这只是一个理论,因为我无法查明导致不需要的更改的确切原因。通常提交根本不会对帧进行任何重大更改,只有微不足道的浮点更改,例如 446.00000055262581 -> 446.00000112002783。但是当发生严重的变化时,它们似乎大量发生。
发生更改的提交也是由同一开发人员使用相同版本的 Xcode 和 Interface Builder 进行的。在获取此数据的示例提交中,文档标签在故事板文件的两个版本中都是 <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6250" systemVersion="14A389" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" initialViewController="JAD-vj-VfC">。
除了确保检查不会对故事板文件提交无关紧要或意外的更改之外,我还想缩小导致我们的故事板视图发生这些不必要更改的原因。如果导致问题的原因是我们可以避免做的事情,我们可以知道原因。
更新: 正如 Tim 乐于指出的那样,这个问题似乎是在视网膜显示器上使用 Interface Builder 时引起的。导致问题的所有开发人员都有视网膜 MacBook Pro。我们这些没有视网膜显示器的人没有遇到过这个问题。
【问题讨论】:
-
Xcode 9.4.1 仍然损坏。每次打开故事板时,我都会提交数百个差异。
-
Xcode 11.3.1 - 错误仍然存在。 2014-2020 (...) Xcode 在故事板打开后仍会产生大量差异。
标签: ios floating-point xcode6 interface-builder retina-display