問(wèn)題描述
今天有個(gè)同學(xué)發(fā)了一個(gè)很簡(jiǎn)單的 demo。里面只有一個(gè) viewController,里面只有一個(gè)用 autoLayout 約束、充滿屏幕的 UITextView,UITextView 里面充滿了大段文字(大概是 UITextView 高度的三倍)嫂拴。xib 的預(yù)覽尺寸選的是 View as: iPhone 7,然后運(yùn)行在 iPhone 5s 或 SE 的模擬器上贮喧,發(fā)現(xiàn) UITextView 自動(dòng)滾動(dòng)到了中間位置筒狠,而不像正常一樣是從頂部開(kāi)始的。
問(wèn)題原因
經(jīng)過(guò)反復(fù)嘗試箱沦,發(fā)現(xiàn)出現(xiàn)問(wèn)題的必要條件如下:
- 用 autoLayout 約束辩恼,或用 autoResizing 并配置為縮放。
- 在實(shí)際運(yùn)行時(shí)谓形,UITextView 的尺寸相比在 xib 里是縮小运挫,而不是放大。
看起來(lái)像是 autoLayout 帶來(lái)的一個(gè)系統(tǒng) bug套耕。
解決方法
正常的解決方法:
- 此處放棄使用 autoLayout 或 autoResizing 的縮放谁帕;
- 用代碼手動(dòng)調(diào)整一下 contentOffset,比如在
viewDidLayoutSubviews
里:
- (void)viewDidLayoutSubviews {
[self.textView setContentOffset:CGPointZero animated:NO];
}
hacky 的解決方法:
在 xib 里把 UITextView 的尺寸手動(dòng)拉小冯袍,不去管黃色的 warning匈挖;或者 View as 選最小的一個(gè)屏幕尺寸。這樣在運(yùn)行時(shí)康愤,UITextView 只會(huì)放大儡循,不會(huì)縮小,問(wèn)題也就消失了征冷。不過(guò)择膝,不能防止日后同事或者自己忘記了這一點(diǎn),不小心改了回來(lái)检激,問(wèn)題還會(huì)出現(xiàn)肴捉。
所以,我們還是盡量選擇正常的解決方法吧~