显示键盘时如何决定滚动哪个 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键盘?