Я хочу разместить UIView на клавиатуре - PullRequest
0 голосов
/ 07 мая 2018

Когда клавиатура отображается, я хочу измерить высоту клавиатуры и посмотреть на нее. В приведенном ниже коде вид повышен, но отклонен.

Процесс:

  1. Создать вид
  2. Установить ограничение (isHidden = true)
  3. Получить высоту клавиатуры
  4. Обновление ограничения (isHidden = false)

Код:

class CompanyDetailViewController: UIViewController {
    var applyView: ApplyView!
    private var applyViewBottom: NSLayoutConstraint?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Create view and set constraint
        self.applyView = UINib(nibName: "ApplyView", bundle: nil).instantiate(withOwner: self, options: nil)[0] as! ApplyView
        view.addSubview(self.applyView)
        self.applyView.translatesAutoresizingMaskIntoConstraints = false
        self.applyView.heightAnchor.constraint(equalToConstant: 204)
        self.applyView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        self.applyView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        let applyViewBotttom = self.applyView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0)
        applyViewBotttom.isActive = true
        self.applyViewBottom = applyViewBotttom
        addNotification()
    }

    private func addNotification() {
        NotificationCenter.default.addObserver(self,
                                               selector: #selector(keyboardWillShowNotification(notification:)),
                                               name: .UIKeyboardWillShow,
                                               object: nil)
    }

    @objc func keyboardWillShowNotification(notification: NSNotification) {
        guard let userInfo = notification.userInfo as? [String: Any] else {
            return
        }
        guard let keyboardInfo = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue else {
            return
        }
        guard let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? Double else {
            return
        }
        // Get keyboard's height and update constraint
        self.applyView.isHidden = false
        self.applyViewBottom?.constant = -keyboardInfo.cgSizeValue.height
        UIView.animate(withDuration: duration) {
            self.view.layoutIfNeeded()
        }
    }
}

1 Ответ

0 голосов
/ 07 мая 2018

Попробуйте это

@objc func keyboardWillShowNotification(_ notification: Notification) {

    if let userInfo = notification.userInfo {

        let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue

        let isKeyboardShowing = notification.name == NSNotification.Name.UIKeyboardWillShow

        applyViewBotttom.constant = isKeyboardShowing ? -keyboardFrame!.height : 0

        UIView.animate(withDuration: 0.5, animations: { () -> Void in
            self.view.layoutIfNeeded()
        })
    }

Демонстрационный пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...