【发布时间】:2018-06-11 22:33:39
【问题描述】:
我的 iOS 应用程序中有一个非常基本的登录表单。我通常实现的典型行为是注册键盘通知并处理 UIScrollView 的滚动行为,以显示当前聚焦的 UITextField。然而这次我需要一个稍微不同的行为。
如果键盘显示我想滚动滚动视图,那么提交按钮将显示在键盘正上方并且可见。
我知道推荐的方法是使用 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)
}
}
【问题讨论】:
-
你可以取出底部约束的出口并在keyboardWillShow中更新它
标签: ios iphone swift uiscrollview keyboard