UIScrollView:视图不会自动滚动

时间:2019-01-23 16:29:02

标签: ios swift uiscrollview

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

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

当键盘消失时,视图再次恢复正常,因此该部分工作正常。

有什么想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

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