問題描述
今天有個同學發了一個很簡單的 demo。里面只有一個 viewController,里面只有一個用 autoLayout 約束、充滿屏幕的 UITextView,UITextView 里面充滿了大段文字(大概是 UITextView 高度的三倍)。xib 的預覽尺寸選的是 View as: iPhone 7,然后運行在 iPhone 5s 或 SE 的模擬器上,發現 UITextView 自動滾動到了中間位置,而不像正常一樣是從頂部開始的。
問題原因
經過反復嘗試,發現出現問題的必要條件如下:
- 用 autoLayout 約束,或用 autoResizing 并配置為縮放。
- 在實際運行時,UITextView 的尺寸相比在 xib 里是縮小,而不是放大。
看起來像是 autoLayout 帶來的一個系統 bug。
解決方法
正常的解決方法:
- 此處放棄使用 autoLayout 或 autoResizing 的縮放;
- 用代碼手動調整一下 contentOffset,比如在
viewDidLayoutSubviews
里:
- (void)viewDidLayoutSubviews {
[self.textView setContentOffset:CGPointZero animated:NO];
}
hacky 的解決方法:
在 xib 里把 UITextView 的尺寸手動拉小,不去管黃色的 warning;或者 View as 選最小的一個屏幕尺寸。這樣在運行時,UITextView 只會放大,不會縮小,問題也就消失了。不過,不能防止日后同事或者自己忘記了這一點,不小心改了回來,問題還會出現。
所以,我們還是盡量選擇正常的解決方法吧~