我們有幾個不同的開發者貢獻的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