我有一个 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/