为什么resignFirstResponder重置UITextView上的contentOffset?

时间:2015-08-11 00:10:46

标签: swift uiscrollview uitextview resignfirstresponder

无论我尝试更改哪种设置,resignFirstResponder始终强制文字滚动到UITextView的顶部

我希望键盘消失,但内容偏移保持不变。

非常感谢任何解决方案。

2 个答案:

答案 0 :(得分:2)

在viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

添加此功能

 - (void)keyboardWillHide:(NSNotification *)notification
{
NSDictionary *info = [notification userInfo];
NSTimeInterval animationDuration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];

[UIView animateWithDuration:animationDuration animations:^{
[_textView scrollRangeToVisible:NSMakeRange([_textView.text length], 0)];
}];
}

答案 1 :(得分:2)

这是由iOS 8中的UIScrollView错误引起的。希望在iOS 9中修复它。我只假设它是一个错误,因为resignFirstResponder在iOS 7中没有这种行为。也许它是一个功能。

我发现阻止resignFirstRespondersetText重置contentOffset的唯一方法如下:

<强>夫特:

textView.layoutManager.allowsNonContiguousLayout = false

目标C

textView.layoutManager.allowsNonContiguousLayout = NO;

我认为它的一个错误的另一个原因是因为文档说它默认设置为NO,但是当你打印掉变量而没有设置它时,它是真的。

有关NSLayoutManager的更多信息,请here