ios - 当键盘可见时 UIScrollView 滚动到按钮

标签 ios iphone swift uiscrollview keyboard

我的 iOS 应用程序中有一个非常基本的登录表单。我通常实现的典型行为是注册键盘通知并处理 UIScrollView 的滚动行为,以显示当前聚焦的 UITextField。然而这次我需要稍微不同的行为。

如果键盘显示“我想滚动 ScrollView ”,则提交按钮将显示在键盘正上方并且可见。

我知道推荐的方法是使用 contentInsets 但这对我来说似乎失败了。我通过设置 contentOffset 得到了它,但我希望看到一个更好的解决方案来解决这个问题。

这是我当前的代码:

func keyboardWillShow(notification: Notification) {
    guard let userInfo: NSDictionary = notification.userInfo as NSDictionary?,
    let keyboardInfo = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue else {
        return
    }
    let keyboardSize = keyboardInfo.cgRectValue.size

    guard let loginButton = loginButton else {
        return
    }
    let buttonOrigin: CGPoint = loginButton.convert(loginButton.bounds, to: self).origin
    let buttonHeight: CGFloat = loginButton.bounds.size.height
    var visibleRect = self.frame
    visibleRect.size.height -= keyboardSize.height

    if !visibleRect.contains(buttonOrigin) {
        let scrollPoint = CGPoint(x: 0.0, y: buttonOrigin.y - visibleRect.size.height + buttonHeight)
        scrollView.setContentOffset(scrollPoint, animated: true)
    }
}

最佳答案

您是否尝试过以下方法?

func keyboardWillShow(notification: Notification) {
    self.scrollView.isScrollEnabled = true
    let contentInsets = UIEdgeInsetsMake(0.0, 0.0, self.keyboardSize.height, 0.0)
    self.scrollView.contentInset = contentInsets
    self.scrollView.scrollIndicatorInsets = contentInsets
    var rect = self.view.frame
    rect.size.height -= self.keyboardSize.height
    if !rect.contains(self.loginButton.frame.origin) {
        self.scrollView.scrollRectToVisible(self.loginButton.frame, animated: true)
    }
}

经过几个小时的尝试,这就是我在应用程序中进行滚动的方式。

关于ios - 当键盘可见时 UIScrollView 滚动到按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48057257/

相关文章:

ios - 仅在 XCode 6 上横向

iOS:使用 takePicture 方法时发生崩溃

iphone - 在 iPad 上将通用应用程序作为 'legacy' iPhone 应用程序运行

iOS在没有删除按钮的情况下重新排序 TableView 行

iphone - 如何将 NSArray 字符串对象值分配给其他 NSString 变量

iphone - 带有静态单元格的 UITableViewController : contentSize is {0, 0}

iphone - 将 RSA 公钥发送到 iphone 并使用它来加密

swift - 在 Swift 中从 Array of Dictionary of Array 中过滤项目

javascript - 尝试使用 highcharts 将数据点注入(inject) iOS webView

ios - 如何获取一个联系人的生日 – swift iOS 9