iOS UITextView 的坑:啟動時文字位置不從頂部開始

問題描述

今天有個同學發了一個很簡單的 demo。里面只有一個 viewController,里面只有一個用 autoLayout 約束、充滿屏幕的 UITextView,UITextView 里面充滿了大段文字(大概是 UITextView 高度的三倍)。xib 的預覽尺寸選的是 View as: iPhone 7,然后運行在 iPhone 5s 或 SE 的模擬器上,發現 UITextView 自動滾動到了中間位置,而不像正常一樣是從頂部開始的。

問題原因

經過反復嘗試,發現出現問題的必要條件如下:

  1. 用 autoLayout 約束,或用 autoResizing 并配置為縮放。
  2. 在實際運行時,UITextView 的尺寸相比在 xib 里是縮小,而不是放大。

看起來像是 autoLayout 帶來的一個系統 bug。

解決方法

正常的解決方法:

  1. 此處放棄使用 autoLayout 或 autoResizing 的縮放;
  2. 用代碼手動調整一下 contentOffset,比如在 viewDidLayoutSubviews 里:
- (void)viewDidLayoutSubviews {
    [self.textView setContentOffset:CGPointZero animated:NO];
}

hacky 的解決方法:
在 xib 里把 UITextView 的尺寸手動拉小,不去管黃色的 warning;或者 View as 選最小的一個屏幕尺寸。這樣在運行時,UITextView 只會放大,不會縮小,問題也就消失了。不過,不能防止日后同事或者自己忘記了這一點,不小心改了回來,問題還會出現。

所以,我們還是盡量選擇正常的解決方法吧~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容