Ios 通过自动布局调整大小时,防止UITextView自动滚动

Ios 通过自动布局调整大小时,防止UITextView自动滚动,ios,swift,uikit,uitextview,Ios,Swift,Uikit,Uitextview,“我的视图”有一个文本视图,其中行数为0,由用户可以编辑的长文本填充。 当键盘显示时,要调整TextView的大小,使其适合屏幕的可见部分,屏幕底部空视图的高度约束等于键盘高度。textView的底部被约束到空视图的顶部,因此文本视图的大小将被调整 发生这种情况时,文本视图会自动向下滚动文本。我希望文本避免这种滚动,以便第一行始终可见。我尝试了几种方法,例如: 禁用keyboardWillShow和keyboardDidShow之间的滚动,不工作 滚动回零,但我们可以看到文本先向下滚动,然后再

“我的视图”有一个文本视图,其中行数为0,由用户可以编辑的长文本填充。 当键盘显示时,要调整TextView的大小,使其适合屏幕的可见部分,屏幕底部空视图的高度约束等于键盘高度。textView的底部被约束到空视图的顶部,因此文本视图的大小将被调整

发生这种情况时,文本视图会自动向下滚动文本。我希望文本避免这种滚动,以便第一行始终可见。我尝试了几种方法,例如:

  • 禁用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