我们有许多不同的开发人员参与的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"/>
在大多数情况下,框架尺寸的数字仅发生少量变化,或者整数值改变1,或者浮点值被截断,或者小数部分改变。
在其他时候,这些值会发生一些变化,例如:
<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。我们这些没有视网膜显示的人没有遇到过这个问题。