【发布时间】:2019-06-24 15:21:42
【问题描述】:
虽然我已经搜索过了,但我对如何最好地解决这个问题感到困惑。
我有一个 tableView,其中底部单元格是列表的输入,与苹果提醒的工作方式相同。当列表中的项目太多时,键盘会覆盖列表,我看不到我在输入什么。
我认为我需要更改 table view 的物理大小并确保它在键盘显示时滚动到底部。
有人说键盘观察者,但我发现的大部分代码都已过时,并且在放入 Xcode 时会出错。
NSNotificationCenter Swift 3.0 on keyboard show and hide
这是我能找到的最好的,但我也听说过一些限制,使用 UITableViewController 而不是嵌入 UITableView 等等......
这是我目前的代码:
NotificationCenter.default.addObserver(self, selector: #selector(EntryViewController.keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(EntryViewController.keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
@objc func keyboardWillShow(notification: Notification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
print("notification: Keyboard will show")
if self.view.frame.origin.y == 0{
self.view.frame.origin.y -= keyboardSize.height
}
}
}
@objc func keyboardWillHide(notification: Notification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y != 0 {
self.view.frame.origin.y += keyboardSize.height
}
}
}
我认为这会将整个视图向上移动,这意味着安全区域(例如导航栏等)下方有 TableView。在这种方法中,我是否使导航视图不透明?
【问题讨论】:
-
嵌入tableView只需增加tableview的底部约束即可,无需修改视图大小...
-
提示:由于 UITableView 是 UIScrollView 的子类,因此您可以使用 contentInset 属性来实现您所需要的。在这里阅读:developer.apple.com/documentation/uikit/uiscrollview/…
标签: ios swift keyboard tableview