【发布时间】:2018-10-23 16:39:37
【问题描述】:
我有一个带有文本视图的表格视图,用于在其下方输入文本,类似于 Apple 消息。当用户开始输入文本并出现键盘时,我想要类似于 IOS Messages 的以下行为。
如果键盘不覆盖任何东西,tableview 的可见部分保持不变。
如果键盘会覆盖某些东西,则 tableview 会向上移动,使其底部填充的单元格刚好位于键盘上方。
因为我使用的是自动布局,所以我目前在 tableview 和它下面的 textview 之间有一个约束。此外,该项目有 IQKeyboard 管理许多其他涉及文本字段和文本视图的视图。
结合IQKeyboard的约束完成2.当键盘出现时,键盘将textview向上推。 textview 将 tableview 向上推。因此,如果 tableview 已完全填充,您会根据需要在键盘上方的 textview 上方看到 tableview 的最后一个单元格。
但是,2. 不起作用。
如果tableview没有被填满,键盘将textview向上推,textview向上推,这样你就可以看到tableview的顶部了。
我尝试在键盘显示和此类工作时调整 tableview 的 contentOffset 属性,但 tableview 在返回之前最初向上移动。我认为这是因为直到键盘开始向上移动之后才会触发更改偏移属性的通知。
我还尝试将 tableview 高度调整为其内容,但这会导致 textview 扩展以填充由于约束而导致的差异。
Content offset approach - problem is that content offset adjusts too late
//register for keyboard notifications and in handler:
if let infoKey = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
let rawFrame = (infoKey as AnyObject).cgRectValue {
let keyboardFrame = view.convert(rawFrame, from: nil)
self.heightKeyboard = keyboardFrame.size.height
UIView.animate(withDuration: 0.2, animations: {
self.tableView.contentInset = UIEdgeInsetsMake(self.heightKeyboard!, 0, 0, 0);
})
}
谁能提出一种模仿 Apple Messages 行为的方法?提前感谢您的任何建议。
【问题讨论】:
-
而不是 "push up the tableview" 有你的约束 shrink tableview 的大小,并将 tableview 滚动到底部。跨度>
-
当我缩小 tableview 时,它会缩小,但它下面的 textview 会扩大以填补差异。这是因为 tableview 底部受限于 textview 顶部。
-
当我改变表格和文本视图之间的约束而不是缩小表格时,也会发生同样的事情。文本视图扩展而不是表格向下移动。我认为这是由于 tableview 被限制在顶部而 textview 被限制在底部。由于 IQKeyboardManager,键盘上下推动整个超级视图,这通常是一个很好的下降。我想我需要修改 tableview 插图,但在不同的地方这样做,所以它发生在键盘出现之前或同时出现。跨度>
标签: ios swift keyboard tableview