UIScrollView 仅在显示键盘时才需要

Posted

技术标签:

【中文标题】UIScrollView 仅在显示键盘时才需要【英文标题】:UIScrollView only required when keyboard is displayed 【发布时间】:2012-04-17 13:57:44 【问题描述】:

我尝试了多种滚动视图实现来处理键盘的存在,包括苹果自己的。我无法让它们中的任何一个工作。

我有一个在不显示键盘时不需要滚动的视图,但是一旦文本字段是第一响应者,并且键盘显示,某些内容需要可滚动。

请注意,唯一可编辑的文本字段是屏幕上的第一个,所以我不需要滚动视图来取消隐藏任何内容 - 我只需要屏幕上半部分的滚动能力,但只有在显示键盘时.

这是我能得到的最接近的:

我可以成功注册键盘通知。加载时,我将滚动视图和内容大小设置为视图的全高。当键盘显示时,我将滚动视图的大小调整为原始高度减去键盘高度:

scrollView.frame = CGRectMake(0, 0, 320, 416 - kbSize.height);

在隐藏时,我只是重置它:

scrollView.frame = CGRectMake(0, 0, 320, 416);

这几乎可行。除了,一旦显示键盘,如果我向下滚动到视图底部(保持键盘显示),然后使用它的返回键隐藏键盘,当滚动视图调整大小时,会有一个不雅的“跳转”回到顶部的屏幕。没有平滑的动画滚动来调整滚动视图的大小。

有什么想法吗?与 Apple 的实现相比,我认为我正在对此进行破解,但这是我所拥有的最接近的。

【问题讨论】:

尝试将调整帧大小放入动画块中? 【参考方案1】:

是的,就像贾斯汀保尔森评论的那样,但这里是代码

[UIView animateWithDuration:0.3 animations:^
        self.scrollView.frame = newFrame;
];

【讨论】:

这会导致视图在动画回到正确大小之前跳转到底部。【参考方案2】:

我认为您可以在关闭之前修复滚动位置:

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 

    // like this:
    self.contentOffset = CGPointMake(0,0);

    // you can animate the frame change here, or where you were doing it
    [UIView animateWithDuration:0.2 animations:^
        scrollView.frame = CGRectMake(0, 0, 320, 416);
    ];
    return YES;

【讨论】:

以上是关于UIScrollView 仅在显示键盘时才需要的主要内容,如果未能解决你的问题,请参考以下文章

仅在插入断点时才有效的 iOS 抽屉 UI

当我在显示的键盘上单击文本字段两次时,iOS UIScrollView 无法滚动

仅当用户点击图像视图时,才在 UIScrollView 上显示 UIButton Done for Images

仅在可见时才需要 Woocommerce 结帐字段

禁用 UIScrollView 手势

需求加载一个 UIScrollView