gpt4 book ai didi

swift - 表格 View 仅滚动到文本字段底部边缘

转载 作者:行者123 更新时间:2023-11-30 11:29:14 24 4
gpt4 key购买 nike

表格 View 最底部的单元格是带有文本字段的单元格。当用户点击它时,我想滚动它,使单元格位于键盘的正上方。

当我使用 animated false 调用 scrollRectToVisible(...) 时,一切都会按预期工作,但是当 animated 时code> 设置为 true 表格只会将单元格滚动到文本字段的底部位于键盘正上方的位置(参见左图)。然而 bottonInsets 应该是正确的,因为我可以手动滚动单元格的最后一位,并且单元格位于正确的位置(参见右图)

我认为 TableView 在键盘上方滚动文本字段的底部边缘是 TableView 的默认行为,但我担心我不知道为什么当我想要动画时它似乎会覆盖我自己的滚动。

左图:
键盘上方的文本字段底部边缘(我保留了边框样式,以便您可以更好地看到它)。

右图:我多么想要啊。单元格的底部边缘位于键盘正上方。

enter image description here

func repositionTextfieldCell(in tableView: UITableView) {
guard let textFieldCell = tableView.bottommostCell() else { return }
guard let keyboardRect = activeKeyboardRect else { return }

// - Adjust insets

var bottomInset = keyboardRect.size.height

tableView.contentInset.bottom = bottomInset
tableView.scrollIndicatorInsets.bottom = bottomInset

// - Make cell visible

let x = textFieldCell.frame.minX
let y = textFieldCell.frame.maxY

tableView.scrollRectToVisible(CGRect(origin: CGPoint(x: x, y: y),
size: CGSize(width: 1, height: 1)), animated: true)
}

最佳答案

将其添加到 viewDidLoad() 中,并为 tableview 底部创建 NSlayout 约束。

NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil
)

创建函数

@objc func keyboardWillShow(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRectangle = keyboardFrame.cgRectValue
let keyboardHeight = keyboardRectangle.height
tableBottomConstraint.constant = self.view.frame.height - keyboardHeight
}
}

重复该过程以在keyboardWillHide()方法中重置tableBottomConstraint.constant = 0。

关于swift - 表格 View 仅滚动到文本字段底部边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50425705/

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