Ios 通过自动布局调整大小时,防止UITextView自动滚动
“我的视图”有一个文本视图,其中行数为0,由用户可以编辑的长文本填充。 当键盘显示时,要调整TextView的大小,使其适合屏幕的可见部分,屏幕底部空视图的高度约束等于键盘高度。textView的底部被约束到空视图的顶部,因此文本视图的大小将被调整 发生这种情况时,文本视图会自动向下滚动文本。我希望文本避免这种滚动,以便第一行始终可见。我尝试了几种方法,例如:Ios 通过自动布局调整大小时,防止UITextView自动滚动,ios,swift,uikit,uitextview,Ios,Swift,Uikit,Uitextview,“我的视图”有一个文本视图,其中行数为0,由用户可以编辑的长文本填充。 当键盘显示时,要调整TextView的大小,使其适合屏幕的可见部分,屏幕底部空视图的高度约束等于键盘高度。textView的底部被约束到空视图的顶部,因此文本视图的大小将被调整 发生这种情况时,文本视图会自动向下滚动文本。我希望文本避免这种滚动,以便第一行始终可见。我尝试了几种方法,例如: 禁用keyboardWillShow和keyboardDidShow之间的滚动,不工作 滚动回零,但我们可以看到文本先向下滚动,然后再
- 禁用keyboardWillShow和keyboardDidShow之间的滚动,不工作
- 滚动回零,但我们可以看到文本先向下滚动,然后再向上滚动(textView.scrollRangeToVisible(NSRange(位置:0,长度:0)))
func keyboardWillShow(_ notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
let duration: TimeInterval = (notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue
emptyViewHeightConstraint.constant = keyboardSize.height
UIView.animate(withDuration: duration) { self.view.layoutIfNeeded() }
}
}
func keyboardWillHide(_ notification: NSNotification) {
let duration: TimeInterval = (notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue
emptyViewHeightConstraint.constant = 0
UIView.animate(withDuration: duration) { self.view.layoutIfNeeded() }
}
注:TextView实际上位于StackView中,此StackView的底部被约束到空视图的顶部。试试这个。。scrollRectToVisible(CGRect.zero,动画:false)谢谢@iosfank,刚刚尝试过,但不幸的是没有成功。我试过键盘Willshow和Didshow试过这个。。scrollRectToVisible(CGRect.zero,动画:false)谢谢@iosfank,刚刚尝试过,但不幸的是没有成功。我试过键盘willshow和didShow