通过自动布局

时间:2017-03-12 11:26:58

标签: ios swift uikit uitextview

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

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

  • 禁用在keyboardWillShow和keyboardDidShow之间滚动,无法正常工作
  • 滚动回零,但我们可以看到文本向下滚动然后向上滚动(textView.scrollRangeToVisible(NSRange(location:0,length:0)))

这是一张让它更清晰的图画(不能嵌入它,对不起):

UITextView Drawing

相关代码:

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() }
}

PS:TextView实际上位于StackView内部,此StackView的底部约束在空视图的顶部。

0 个答案:

没有答案