【问题标题】:Scrolling down UIScrollView when selecting upper UITextField选择上部 UITextField 时向下滚动 UIScrollView
【发布时间】:2016-05-04 22:04:42
【问题描述】:

我有一个带有 ContentView 的 ScrollView,它有 5 个 UITextField。我已经实现了adjustForKeyboard:

func adjustForKeyboard(notification: NSNotification) {
    let userInfo = notification.userInfo!

    let keyboardScreenEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
    let keyboardViewEndFrame = view.convertRect(keyboardScreenEndFrame, fromView: view.window)

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

    scrollView.scrollIndicatorInsets = scrollView.contentInset

}

当然我已经设置了观察者:

override func viewWillAppear(animated: Bool) {
    // Add observers for keyboard
    let notificationCenter = NSNotificationCenter.defaultCenter()
    notificationCenter.addObserver(self, selector: "adjustForKeyboard:", name: UIKeyboardWillHideNotification, object: nil)
    notificationCenter.addObserver(self, selector: "adjustForKeyboard:", name: UIKeyboardWillChangeFrameNotification, object: nil)
}

当我从上到下选择 TextFields 时它工作正常,但是当我选择上层 TextField 时,它只移动几个像素。我应该如何改变我的方法?

【问题讨论】:

    标签: ios iphone swift uiscrollview uitextfield


    【解决方案1】:

    更改底部的 contentInset 不会使 scrollView 滚动。它在底部设置了一个缓冲区,因此如果您一直滚动到底部,它将有更多的滚动空间。

    您想修改 scrollView 的 contentOffset 并为 contentOffset 更改设置动画。你会做这样的事情:

    var contentOffset = scrollView.contentOffset
    contentOffset.y = contentOffset.y + (however much you want it to move)
    scrollView.setContentOffset(contentOffset, animated: true)
    

    这将让它根据选择的 textField 上下滚动。

    【讨论】:

    • 所以我不需要基于通知类型的if-else?
    • 我应该移动多少?可能是keyboardViewEndFrame.height 还是keyboardScreenEndFrame.height?
    • 这只是一个如何/修改什么的例子。您需要为显示和隐藏案例执行不同的 contentOffset,因为您可能希望状态不同。我不知道你应该移动多少,这取决于你想要做什么。
    • 但是值不应该是硬编码的,不是吗?我认为它必须与键盘有关......
    • 是的,会的。我过去所做的是使用keyboardFrame.origin.y 来找出键盘的最高点,然后做一些数学运算来找出我希望键盘与它相关的位置。 textField.convertPoint(textField.origin.y, toView: UIWindow.mainWindow) 是一种在正确系统中获取所有内容的有用方法(其中有几个帮助方法,但这就是它的要点)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多