首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIScrollView:视图不会自动滚动

UIScrollView:视图不会自动滚动
EN

Stack Overflow用户
提问于 2019-01-24 00:29:02
回答 1查看 224关注 0票数 0

我是Swift/iOS的新手,我正在制作一个简单的应用程序来跟踪我家里的药柜。我在管理屏幕上的文本输入键盘时遇到了问题。

这个应用程序基本上是一个包含数据条目的表视图,当按下其中一个条目时,您将进入包含一些详细信息的详细视图。

在这个细节视图中,我有一个UIScrollView,它被约束为等于安全区域,在它里面有一个名为“容器视图”的UIView,它与滚动视图的大小相同,在另一个视图中使用AutoLayout (没有警告)组成屏幕。

在其中一个子视图中,有一个UITextField,我用它来收集用户通过屏幕键盘输入的笔记。

我添加了一些代码来管理屏幕上的键盘,当它出现时调整视图底部插图,以防止键盘隐藏文本字段,并在键盘消失时删除该插图。

我最终得到了以下代码,这是我从hackingwithswift.com获得的(属性观察器设置为正确调用此函数,我已确认它是有效的):

代码语言:javascript
运行
复制
func adjustInsetForKeyboardShowHide(notification: Notification) {

    let userInfo = notification.userInfo!

    let keyboardScreenEndFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
    let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)

    if notification.name == UIResponder.keyboardWillHideNotification {
        scrollView.contentInset = UIEdgeInsets.zero
    } else {
        scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardViewEndFrame.height, right: 0)
    }

    scrollView.scrollIndicatorInsets = scrollView.contentInset

}

然而,即使当键盘出现在屏幕上时,该函数被正确调用,视图也不会滚动。我不确定问题出在这里还是在IB的某个地方。

让我印象深刻的是,在键盘出现在屏幕上后,我可以手动向下滚动,滚动到合适的程度,只是它不会像我希望的那样自动滚动。正如预期的那样,当屏幕上的键盘没有显示时,视图不会滚动,所以显然调整功能工作得很好,它只是不会自己滚动。

当键盘消失时,视图重新调整到正常状态,因此该部件工作正常。

有什么想法吗?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-24 00:52:05

在scrollView中,必须设置内容偏移量。因此,在您的情况下,您必须这样做:

代码语言:javascript
运行
复制
if notification.name == UIResponder.keyboardWillHideNotification {
        scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)
    } else {
        scrollView.setContentOffset(CGPoint(x: 0, y: keyboardViewEndFrame.size.height), animated: true)
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54331667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档