仅当键盘覆盖视图时如何更改 UITableView 内容插图?

Posted

技术标签:

【中文标题】仅当键盘覆盖视图时如何更改 UITableView 内容插图?【英文标题】:How to change UITableView content insets only if keyboard covers view? 【发布时间】:2015-10-30 22:11:38 【问题描述】:

我有一个包含 tableview 的视图控制器。我在我的应用程序的多个位置重用了这个视图控制器,因此它位于拆分视图控制器内部,也位于 iPad 上的弹出框内。

我添加了观察者来监听键盘显示/隐藏,并根据键盘高度更改我的内容插图。每当视图控制器是全屏高度时,这都有效,但它在弹出窗口中不起作用,弹出窗口调整大小并且 tableview 实际上没有被键盘覆盖,给我留下一堆空白空间。

有解决办法吗?如果键盘覆盖视图,如何仅更改内容插图?

【问题讨论】:

【参考方案1】:

您只需要找到键盘将覆盖多少表格视图,然后将插图设置为多少。

/* Get the keyboard rect (which is screen coordinates) in tableView coordinates */
CGRect endFrameScreen = [[note.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGRect endFrameWindow = [tableView.window convertRect:endFrameScreen fromWindow:nil];
CGRect endFrameView = [tableView convertRect:endFrameWindow fromView:nil];

if (!CGRectIntersectsRect(tableView.bounds, endFrameView))

    /* The keyboard will not cover our tableView; nothing to do */
    return;


/* This is how much we need to inset */
CGFloat bottomInset = CGRectGetMaxY(tableView.bounds) - endFrameView.origin.y;

如果仅使用 ios8+,则可以使用 convertRect:fromCoordinateSpace:[[UIScreen mainScreen] coordinateSpace] 将两个 convertRect 步骤更改为一个步骤

【讨论】:

以上是关于仅当键盘覆盖视图时如何更改 UITableView 内容插图?的主要内容,如果未能解决你的问题,请参考以下文章

仅当键盘快速出现时如何使scrollView滚动

如何测试键盘是不是覆盖 UITableView 中的 UITextField?

键盘隐藏时 UITableView 略微上升

Swift:仅当键盘隐藏 TextField 或 Button 时滚动视图

弹出软键盘时,adMob 横幅会覆盖文本视图

UIKeyboard 可见时如何更改 UITableView 的大小?