简单地调用UITextView`sizeThatFits:`会导致毛刺滚动/输入行为?
我发现在iOS 8中使用UITextView
sizeThatFits:
会导致毛刺滚动行为。 文本视图不断滚动远离您键入的行。 它似乎滚动到视图的顶部然后再返回。
如果重要,则将视图设置为inputAccessoryView
。
通过键盘,我将输入: 1 return 2 return 3 return 4
我输入4
之前的TextView
:
在委托方法中,我调用sizeThatFits:
.
- (void)textViewDidChange:(UITextView *)textView { [textView sizeThatFits:CGSizeMake(100, 100)]; }
TextView
向上滚动到顶部。 输入发生在视图下方。 当您键入时,抖动,毛刺的滚动运动到顶部然后回到您的线。 输入发生在键盘下方。 非常讨厌。
如果我注释掉这条线:
//[textView sizeThatFits:CGSizeMake(100, 100)];
现在,当我输入4
我们在最后一行上输入很好,顺畅:
UIScrollView sizeThatFits:
docs状态:
此方法不会调整接收器的大小。
所以我很困惑为什么这会对文本字段的滚动/输入产生任何影响。
有什么方法可以避免这种毛刺滚动吗?
如何在不遇到此错误的情况下计算文本视图的“适合高度”?
我有完全相同的问题,我花了5个小时来解决这个讨厌的苹果虫,我希望我可以给他们发票! 我最终做的是创建我的原始UItextView的副本:
self.textViewCopy = [[UITextView alloc] initWithFrame:self.textView.frame]; [self.textViewCopy setFont:self.textView.font];
并且不要将其添加为子视图。
然后在副本上调用sizeThatFits(这将搞砸我们不关心的副本并获取我们需要的信息):
[self.textViewCopy setText:self.textView.text]; CGSize size = [self.textViewCopy sizeThatFits:CGSizeMake(fixedWidth, CGFLOAT_MAX)];
使用NSString方法sizeWithFont:constrainedToSize:
对UITextView中的文本似乎提供了sizeThatFits:
替代sizeThatFits:
。
CGSize preferredSize = [textView.text sizeWithFont:textView.font constrainedToSize:CGSizeMake(CGRectGetWidth(textView.bounds), 200.0)];
sizeThatFits:
有可能使用sizeWithFont:constrainedToSize:
引擎盖下。 无论如何,使用NSString方法时不会再现iOS故障滚动错误。