【问题标题】:UIScrollView: View does not scroll automaticallyUIScrollView:视图不会自动滚动
【发布时间】:2019-06-17 07:18:30
【问题描述】:

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

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

在这个详细视图中,我有一个 UIScrollView,它被限制为等于安全区域,在它内部有一个名为“Container View”的 UIView,它与 Scrollview 的大小相同,在该视图内部还有一个视图来组成使用 AutoLayout 的屏幕(没有警告)。

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

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

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

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 的某个地方...

让我印象深刻的是,我可以在键盘出现在屏幕上后手动向下滚动到正确的数量,但它并没有像我希望的那样自动滚动。正如预期的那样,当屏幕键盘不显示时视图不会滚动,因此显然调整功能工作正常,它只是不会自行滚动。

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

有什么想法吗?

非常感谢!

【问题讨论】:

    标签: ios swift uiscrollview


    【解决方案1】:

    在 scrollView 中你必须设置内容偏移量。所以在你的情况下,你必须这样做:

    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)
        }
    

    【讨论】:

    • 感谢您的回复!有了这个替换,视图确实移动了,但太高了。我现在正在尝试解决原因!
    • 对不起。你必须使用高度。我刚刚编辑了我的答案。
    • 我想通了!我想要的行为是通过设置keyboardViewEndFrame.height而不是minY来获得的。非常感谢您的帮助,这是我无法弄清楚的滚动命令,您给了我!
    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2013-08-23
    相关资源
    最近更新 更多