gpt4 book ai didi

ios - 当键盘出现时,快速 UITableView 向上滚动,但我看不到顶部单元格

转载 作者:行者123 更新时间:2023-11-29 05:08:22 25 4
gpt4 key购买 nike

我有一个带有 TableView 和 textView 的 ViewController。我使用以下代码,以便当键盘出现时,它将 textView 和 Tableview 向上推。

绑定(bind)到键盘

extension UIView {

func bindToKeyboard(){
NotificationCenter.default.addObserver(self, selector:
#selector(UIView.keyboardWillChange(_:)), name:
UIResponder.keyboardWillChangeFrameNotification, object: nil)
}

@objc func keyboardWillChange(_ notification: NSNotification) {
let duration = notification.userInfo!
[UIResponder.keyboardAnimationDurationUserInfoKey] as! Double
let curve = notification.userInfo![UIResponder.keyboardAnimationCurveUserInfoKey]
as! UInt
let curFrame = (notification.userInfo![UIResponder.keyboardFrameBeginUserInfoKey]
as! NSValue).cgRectValue
let targetFrame = (notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey]
as! NSValue).cgRectValue
let deltaY = targetFrame.origin.y - curFrame.origin.y

UIView.animateKeyframes(withDuration: duration, delay: 0.0, options:
UIView.KeyframeAnimationOptions(rawValue: curve), animations: {
self.frame.origin.y += deltaY

},completion: {(true) in
self.layoutIfNeeded()
})
}
}

我遇到的问题是 tableView 中的顶部单元格,除非关闭键盘,否则我无法向下滚动以显示它们。我一直在寻找可能的代码示例来解决这个问题,但我似乎找不到正确的解决方案。任何意见都将受到高度赞赏。

keyboard is hiden

keyboard is shown

解决方案

向 viewDidLoad 添加观察者

let notificationCenter = NotificationCenter.default

notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillHideNotification, object: nil)

notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)

这已添加到类(class)中

 @objc func adjustForKeyboard(notification: Notification) {

guard let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }

let keyboardScreenEndFrame = keyboardValue.cgRectValue

let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)

if notification.name == UIResponder.keyboardWillHideNotification {
tableView.contentInset = .zero
} else {
//Modify the top insets to 350 and the height of the keyboard > 10 ? 10 : 10
//to eliminate the gap between the bottom cell and the textView
tableView.contentInset = UIEdgeInsets(top: 350, left: 0, bottom: keyboardViewEndFrame
.height > 10 ? 10 : 10, right: 0)
}
tableView.scrollIndicatorInsets = tableView.contentInset
}

希望这对任何人都有帮助。

最佳答案

您正在更改 TableView 的 frame,但您应该修改 contentOffsetcontentInsets 属性。

如果移动框架,整个表格将移出屏幕,因此顶部单元格也会移出屏幕。

有很多(我的意思是很多)教程可能对您有帮助,请参阅例如https://www.hackingwithswift.com/example-code/uikit/how-to-adjust-a-uiscrollview-to-fit-the-keyboard

还可以找到多种解决方案,例如github。

关于ios - 当键盘出现时,快速 UITableView 向上滚动,但我看不到顶部单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59943659/

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