【问题标题】:My view runs outside the screen and doesn't shift back down我的视图在屏幕外运行并且不会向下移动
【发布时间】:2018-08-20 10:31:57
【问题描述】:

我尝试实现一个通知,提醒视图键盘将出现并且应该随着键盘高度向上移动。

func subscribeToKeyboardNotifications() {
    NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillShow(_:)), name: .UIKeyboardWillShow, object: nil)
}

这是 KeyboardWillShow 方法体:

@objc func KeyboardWillShow(_ notification: Notification) {
    view.frame.origin.y -= getKeyBoardHeight(notification)
}

getKeyBoardHeight 函数:

func getKeyBoardHeight(_ notification: Notification) -> CGFloat {
    let userinfo = notification.userInfo
    let keyboardsize = userinfo![UIKeyboardFrameEndUserInfoKey] as! NSValue

    return keyboardsize.cgRectValue.height
}

当我在模拟器中打开键盘时,为什么我的应用会完全移出视线?

【问题讨论】:

  • KeyboardWillShow 方法中的view 是什么?
  • 不要移动所有视图,只移动键盘覆盖的子视图。
  • view.frame.origin.y -= getKeyBoardHeight(notification) 正在向下移动您的视图。改用+= :) 正 = 上/右 |负数 = 向下/向左
  • 并将更改重置为keyboardWillHide 方法。

标签: ios xcode swift4.2


【解决方案1】:

这些是我经常使用的有效方法,我认为您的问题在于使用-= getKeyboardHeight,请尝试下面我的keyboardWillShow 方法中的代码

class VC: UIViewController {

    func subscribeToKeyboardNotifications() {
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: .UIKeyboardWillShow, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: .UIKeyboardWillHide, object: nil)
    }

    func unsubscribeFromKeyboardNotifications() {
        NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow, object: nil)
        NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide, object: nil)
    }

    @objc func keyboardWillHide(notification: NSNotification) {
        view.frame.origin.y = 0
    }

    @objc func keyboardWillShow(notification: NSNotification) {
        view.frame.origin.y = -getKeyboardHeight(notification: notification)
    }

    func getKeyboardHeight(notification: NSNotification) -> CGFloat {
        let userInfo = notification.userInfo
        let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue
        return keyboardSize.cgRectValue.height
    }

}

【讨论】:

  • 非常感谢它有效!如果您向我解释为什么 -= getKeyboardHeight 无法正常工作,我将不胜感激
  • 我不是 100% 确定,如果键盘高度为 200,使用 -getKeyboardHeight 原点将是 -200。使用 -= 键盘第一次启动时将是 -200,但如果您不将其重置回 0,下一次它将是 -400 并在每次收到通知时继续移动。您可能会多次收到通知,您是手动设置第一响应者还是什么?无论如何,使用 -getKeyboardHeight 更具体,您希望视图准确地向上移动键盘的高度
  • 如果它解决了您的问题,请接受答案,以便可以关闭问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多