为什么 resignFirstResponder 在 UITextView 上重置 contentOffset?
Why does resignFirstResponder reset contentOffset on a UITextView?
无论我尝试更改哪个设置,resignFirstResponder
总是强制文本滚动到 UITextView
的顶部
我希望键盘消失但内容偏移量保持不变。
任何解决方案将不胜感激。
在 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)];
}];
}
这是由 iOS 8 中的 UIScrollView
错误引起的。希望在 iOS 9 中他们修复了它。我只是假设它是一个错误,因为 resignFirstResponder
在 iOS 7 中没有这种行为。也许它是一个功能。
我发现防止 resignFirstResponder
和 setText
重置 contentOffset
的唯一方法如下:
Swift:
textView.layoutManager.allowsNonContiguousLayout = false
Objective C
textView.layoutManager.allowsNonContiguousLayout = NO;
我认为它是一个错误的另一个原因是因为文档说它默认设置为 NO,但是当您打印出变量而不设置它时,它是正确的。
可以找到有关 NSLayoutManager
的更多信息 here
无论我尝试更改哪个设置,resignFirstResponder
总是强制文本滚动到 UITextView
我希望键盘消失但内容偏移量保持不变。
任何解决方案将不胜感激。
在 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)];
}];
}
这是由 iOS 8 中的 UIScrollView
错误引起的。希望在 iOS 9 中他们修复了它。我只是假设它是一个错误,因为 resignFirstResponder
在 iOS 7 中没有这种行为。也许它是一个功能。
我发现防止 resignFirstResponder
和 setText
重置 contentOffset
的唯一方法如下:
Swift:
textView.layoutManager.allowsNonContiguousLayout = false
Objective C
textView.layoutManager.allowsNonContiguousLayout = NO;
我认为它是一个错误的另一个原因是因为文档说它默认设置为 NO,但是当您打印出变量而不设置它时,它是正确的。
可以找到有关 NSLayoutManager
的更多信息 here