我们有几个不同的开发者贡献的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"/>
and
<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">
。
除了确保不对提交故事板文件提交不重要或无意的更改,我想缩小是什么导致这些不需要的故事板视图更改。如果这是我们可以避免造成问题的原因,我们可以意识到原因。
更新: 正如蒂姆指出的那样,这个问题似乎是在视网膜显示器上使用Interface Builder时造成的。所有造成问题的开发者都有视网膜MacBook Pro。我们这些没有视网膜显示器的人都没有遇到过这个问题。
感谢杰夫的冗长解释,这也发生在我们身上。你有没有找到任何方法来避免这种情况? – celiker 2015-03-06 14:03:28
@celiker正如Tim所说的,这似乎与在视网膜显示器上使用Interface Builder相关。我们所有的开发人员都会导致视网膜显示,而没有视网膜显示的人员则没有问题。内部实现,解析和重写XML,似乎没有正确处理像素精度。因此,在Apple修复此错误之前,避免在视网膜显示器上使用IB是目前唯一的解决方法。 – 2015-03-06 18:13:42
这仍然让我疯狂,Xcode 9.1 ...你提交了一个bug吗? – 2017-12-15 15:09:02