gpt4 book ai didi

ios - 在编辑时将 TextView 保持在键盘上方

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:59 27 4
gpt4 key购买 nike

我有一个动态高度的 TextView 。当用户添加或删除文本时, TextView 的高度会发生变化。

我的问题是,随着用户添加文本和 TextView 的增长,它会在键盘后面消失。当键盘出现时,我已经成功地移动了 View ,因此 TextView 从一开始就被隐藏了,但是我似乎无法弄清楚如何在高度变化时将它保持在键盘上方。非常感谢任何帮助!

键盘出现和消失时移动 View 的函数:

func keyboardWillShow(sender: NSNotification) {
let info: NSDictionary = sender.userInfo!
let value: NSValue = info.valueForKey(UIKeyboardFrameBeginUserInfoKey) as! NSValue
let keyboardSize: CGSize = value.CGRectValue().size
let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height + 20, 0.0)
scrollView.contentInset = contentInsets

var aRect: CGRect = self.view.frame
aRect.size.height -= keyboardSize.height
let activeTextFieldRect: CGRect? = activeItemRect()
let activeTextFieldCentre: CGPoint? = CGPointMake(CGRectGetMidX(activeTextFieldRect!), CGRectGetMidY(activeTextFieldRect!))
if (!CGRectContainsPoint(aRect, activeTextFieldCentre!)) {
scrollView.scrollRectToVisible(activeTextFieldRect!, animated:true)
}
}

func keyboardWillHide(sender: NSNotification) {
let contentInsets: UIEdgeInsets = UIEdgeInsetsZero
scrollView.contentInset = contentInsets
}

最佳答案

因此,需要发生的事情是,只要光标位置发生变化(如果它在边界之外),就需要告知包含 scrollView 的内容进行滚动。我已经从链接中改编了一个函数来调用它。确保将 scrollView 替换为您的名称。

internal func scrollToCursorForTextView(textView: UITextView) {
var cursorRect = textView.caretRectForPosition(textView.selectedTextRange!.start)
cursorRect = scrollView.convertRect(cursorRect, fromView: textView)
if !self.rectVisible(cursorRect) {
cursorRect.size.height += 8
scrollView.scrollRectToVisible(cursorRect, animated: true)
}
}

internal func rectVisible(rect: CGRect) -> Bool {
var visibleRect = CGRect()
visibleRect.origin = scrollView.contentOffset
visibleRect.origin.y += scrollView.contentInset.top
visibleRect.size = scrollView.bounds.size
visibleRect.size.height -= scrollView.contentInset.top + scrollView.contentInset.bottom
return CGRectContainsRect(visibleRect, rect)
}

Swift 4 更新

internal func scrollToCursorForTextView(textView: UITextView) {
guard let startOfRange = textView.selectedTextRange?.start else { return }
var cursorRect = textView.caretRect(for: startOfRange)
cursorRect = scrollView.convert(cursorRect, from: textView)
if !rectVisible(rect: cursorRect) {
cursorRect.size.height += 8
scrollView.scrollRectToVisible(cursorRect, animated: true)
}
}

func rectVisible(rect: CGRect) -> Bool {
var visibleRect = CGRect()
visibleRect.origin = scrollView.contentOffset
visibleRect.origin.y += scrollView.contentInset.top
visibleRect.size = scrollView.bounds.size
visibleRect.size.height -= scrollView.contentInset.top + scrollView.contentInset.bottom
return visibleRect.contains(rect)
}

关于ios - 在编辑时将 TextView 保持在键盘上方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37449862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com