显示键盘时如何决定滚动哪个 UIScrollView

Posted

技术标签:

【中文标题】显示键盘时如何决定滚动哪个 UIScrollView【英文标题】:How to decide which UIScrollView to scroll when showing keyboard 【发布时间】:2013-05-28 08:32:49 【问题描述】:

在我的 ios 应用程序中,我有一个常规的 UIScrollView 覆盖整个屏幕。这在顶部包含一个 UIView(带有一些标题图像、工具和其他东西),再往下是一个填充了一些 Web 内容(博客条目和 cmets)的 UIWebView

当专注于 Web 视图的文本字段之一,从而显示键盘时,Web 视图滚动以将输入字段放在键盘上方。问题是标题没有移开,从而覆盖了输入字段。

所以我的问题是;显示键盘时如何告诉代码滚动哪个滚动视图?似乎退回到一些默认行为,并滚动保存输入字段的UIWebView。我想滚动父 UIScrollView

我尝试将UIWebView 上的.scrollEnabled 设置为NO,但这并没有改变任何东西。 UIWebView 甚至不应该有滚动功能,因为我将UIWebView(以及主要.contentSize 的主要.contentSize)的高度设置为其内容的高度,每次网络视图是填充。

我怎样才能做到这一点?还是我必须手动滚动?

【问题讨论】:

【参考方案1】:

您应该注册键盘通知,我不知道它是否能解决问题,但请看这里:Apple doc about keyboard。 我这样你就可以用屏幕上的键盘滚动滚动视图,但我猜 webview 也会响应,因为它已经注册了键盘通知,也许你也可以重新滚动它来监听这种通知。

【讨论】:

是的,你把我引向了正确的方向。我在 scrollviewDidScroll 处重新滚动(重置)了 Web 视图,然后进行了一些计算并以编程方式滚动了滚动视图。感谢您的指导。【参考方案2】:

仅供参考

来自 Apple 文档:

重要提示:您不应将 UIWebView 或 UITableView 对象嵌入 UIScrollView 对象。如果这样做,可能会导致意外行为 因为两个对象的触摸事件可能会混淆和错误 处理。

【讨论】:

是的,我知道这个警告。但是因为我已经关闭了 UIWebView 的滚动,所以应该没问题。至少据我所知? ***.com/questions/12868999/…【参考方案3】:

不要滚动任何一个内容来向上移动内容。要么做两件事之一:-

1:将所有内容放在一个容器视图中,并使用 UIView 动画将所有内容向上移动。这就是我所做的。

或者

2:将所有内容放在单独的滚动视图中并使用[scrollView setContentOffset:offset animated:YES]; 将其向上移动。虽然老实说这是一种旧方法,但我不会推荐它

这有意义吗?

【讨论】:

以上是关于显示键盘时如何决定滚动哪个 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIView 锚定到屏幕上的特定位置并在滚动时将其保留在那里

Nativescript Vue:滚动ListView时如何关闭searchBar键盘?

如何通过在焦点集中时将其移动到键盘顶部/视图中心来突出显示滚动视图中的焦点 UITextField

为啥显示键盘后我的滚动不起作用?

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

我设置滚动视图偏移以显示被键盘隐藏的文本字段。如果用户在显示键盘时滚动,则滚动视图会向下捕捉