滚动 UIScrollView 以适应 iOS 中的键盘

Posted

技术标签:

【中文标题】滚动 UIScrollView 以适应 iOS 中的键盘【英文标题】:Scrolling a UIScrollView to accommodate the keyboard in iOS 【发布时间】:2014-02-19 05:43:46 【问题描述】:

我有一个滚动视图,其中包含 1500 pt 高的内容视图。它滚动的屏幕是标准 iPad 纵向屏幕 (1024)。

我有一些分散在滚动视图的内容视图中的文本字段。当我打开键盘(通过点击文本字段)时,我已经将滚动视图的底部约束提高了 216 个点,以便为键盘腾出空间。但是,如果我的文本视图位于屏幕底部,它仍然会被键盘隐藏。

我想以编程方式滚动滚动视图(我知道如何使用[self.scrollview setContentOffset:CGMake...),但我不知道滚动它的距离。我尝试使用 textField 框架的 y 坐标来计算它,但我认为我只能检索相对于内容视图高度的值……而不是它在屏幕上的实际位置(就好像我在 iPad 外部测量它一样使用以点为单位的卷尺)。

为了计算视图滚动的距离,我现在需要知道文本框在屏幕上的位置——这样我就可以确定它是否会被键盘覆盖并移动滚动足以看到它。

有什么方法可以找出文本字段在屏幕上的位置吗?

谢谢!

【问题讨论】:

请在您的问题中添加屏幕截图以更清晰 apeth.com/iosBook/ch23.html#_keyboard_covers_text_field 使用convertRect:fromViewconvertRect:ToViewconvertPoint:ToViewconvertPoint:fromView 转换坐标。 【参考方案1】:

我使用此代码 sn-p 在我的 iPhone 应用程序中获得相同的结果。为 heightDiff

找到合适的值
float heightDiff = 150;

CGPoint yScrollPoint = [self.scrollView convertPoint:CGPointZero fromView:self.textfield];
CGPoint scrollPoint = CGPointMake(0.0, yScrollPoint.y - heightDiff);
[self.scrollView setContentOffset:scrollPoint animated:YES];

将此添加到您的 textFieldDidBeginEditing:textField

希望这会有所帮助。

【讨论】:

【参考方案2】:

Matt 在上面的评论中发布了一个链接,其中详细说明了如何执行此操作以及更多内容:http://www.apeth.com/iOSBook/ch23.html#_keyboard_covers_text_field

【讨论】:

以上是关于滚动 UIScrollView 以适应 iOS 中的键盘的主要内容,如果未能解决你的问题,请参考以下文章

iOS自动布局:相等的空间以适应超级视图宽度[重复]

在 xib 文件视图之外设置视图以适应滚动视图 + 不同的 xib 用于方向 - iOs

UIScrollView 内的 UIWebView 框架不会拉伸大小以适应所有内容

具有自适应布局的 UIScrollView

调整 UIView 的大小以适应 uiScrollView 中的所有内容

以编程方式在iOS上滚动UIWebView