在iOS7中,当scrollEnabled=NO时,如何使用UITextView setContentOffset?

3

我的应用程序有一个自动滚动功能。当它被激活时,我的代码会禁用textView滚动并使用CADisplayLink来更改contentOffset。

在早期版本的iOS中工作正常,但在第7个版本中,文本会出现裁剪。

进一步发现,一段时间后我禁用textView滚动后,contentSize被更改了。看起来像某种优化。但它不考虑contentOffset

要重现此错误:

  1. Make sure text in textView is large enough, at least two pages in size.
  2. In ViewController put _textView.scrollEnabled = NO; into -viewDidLoad
  3. In ViewController add:

    - (void)viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
        [_textView setContentOffset:CGPointMake(0, 400) animated:YES];
    }
    
问题是:如何在iOS7中在将scrollEnabled设置为NO的情况下,自动滚动UITextView
禁用滚动以防止可能出现的UITextView内置的光标位置更改时的自动滚动,并且不允许用户与控件进行交互。

1
我觉得这是由于新的iOS7全屏布局设计所致。请参考我的回答https://dev59.com/H2Qn5IYBdhLWcg3wIkMF#18785646。那会很有帮助... - Nandha
1
@Nandha,感谢您的评论。是的,我知道那个新的UIViewController属性,并且也检查过了。但结果还是一样的。 - zxcat
2个回答

4
如果在scrollEnabled为NO的情况下,你的文本被裁剪在底部:
self.textContainerInset = UIEdgeInsetsMake(0.0f, 0.0f, -20.0f, 0.0f);

这是正确的答案。其他答案并不在所有情况下都保留边距。 - jasonjwwilliams

1

虽然不能完全解决问题,但可以采用一种变通方法,允许启用滚动,但将UserInteractionEnabled设置为NO。

[_textView setScrollEnabled:YES];
[_textView setUserInteractionEnabled:NO];

这就是我一直在寻找的...给你五颗星,兄弟。 - Arunavh Krishnan
现在你不能在其中输入,除非是程序代码。 - CQM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接