我有一个 UITextView,它被设计为在需要时放大以适应 contentView。但是,当我粘贴一段文本时,它会将内容的起点和终点垂直放置在错误的位置。输入或删除字符会将其重置回正确的位置。

任何想法这是为什么?

-(void)textViewDidChange:(UITextView *)textView {
    self.textView.frame = CGRectMake(
        self.textView.frame.origin.x,
        self.textView.frame.origin.y,
        self.textView.frame.size.width,
        self.textView.contentSize.height + HEADER_ADDITIONAL_HEIGHT);

    self.textView.contentOffset = CGPointMake(0, 0);

    self.previousContentSize = textView.contentSize;
}

最佳答案

当我使用:

textView.contentSize = textView.frame.size;
textView.contentOffset = CGPointZero;

它解决了我的问题,但产生了一个新问题,我们有时会在键入或删除文本时出现奇怪的滚动。所以,我用了这个:
textView.contentSize = CGSizeMake( textView.contentSize.width,
                                   textView.contentSize.height+1);

这也解决了这个问题。我认为我们在这里需要的是每当 textview 的 contentSize 改变时我们得到的效果。不幸的是,我不知道这种效果是什么。如果有人知道,请告诉。

更新:
我找到了一种可以用来解决问题的方法(我用它来解决我的问题)。
你可以要求 NSLayoutMANager 刷新整个布局:
[textView.textStorage edited:NSTextStorageEditedCharacters range:NSMakeRange(0, textView.textStorage.length) changeInLength:0];

NSLayoutManager 试图避免刷新布局,因为它既耗时又需要大量工作,因此它被设置为仅在绝对必要时(懒惰)执行此操作。
有许多与此类相关的 invalidateLayout 函数,但它们在调用时都不会导致实际重新布局。

关于iphone - 粘贴文本时 UITextView 在视觉上改变内容位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10827091/

10-09 09:07