×

iOS UITextView 的坑:启动时文字位置不从顶部开始

96
戴仓薯
2017.02.07 12:29* 字数 373

问题描述

今天有个同学发了一个很简单的 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 只会放大,不会缩小,问题也就消失了。不过,不能防止日后同事或者自己忘记了这一点,不小心改了回来,问题还会出现。

所以,我们还是尽量选择正常的解决方法吧~

iOS 仓薯遇到的坑
Web note ad 1