Swift 5 - Редактирование текстового поля скрывает клавиатуру - PullRequest
1 голос
/ 10 октября 2019

У меня возникли проблемы с автоматическим макетом и перемещением изображения вверх, когда на экране iOS отображается клавиатура, когда она закрыта. В Интернете можно найти различные решения, но наиболее распространенным является использование Центра уведомлений, чтобы получить размер клавиатуры и анимировать вид. Я создал IBOutlet для изменения ограничения, но получаю сообщение об ошибке. У значения типа 'UIView' нет члена 'passwordBottom'.

Может ли кто-нибудь помочь с ошибкой?

class LoginViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBOutlet weak var usernameBottom: NSLayoutConstraint!
    @IBOutlet weak var passwordBottom: NSLayoutConstraint!
    @IBOutlet weak var usernameTF: UITextField!
    @IBOutlet weak var passwordTF: UITextField!

    var offsetY:CGFloat = 0

    @IBAction func signinPressed(_ sender: Any) {
    }

    @IBAction func forgotPasswordPressed(_ sender: Any) {
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        NotificationCenter.default.addObserver( self, selector: #selector(keyboardWillShow(notification:)), name:  UIResponder.keyboardWillShowNotification, object: nil )
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
    }

    @objc func keyboardWillShow( notification: Notification) {
        if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
            let newHeight: CGFloat
            let duration:TimeInterval = (notification.userInfo![UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0
            let animationCurveRawNSN = notification.userInfo![UIResponder.keyboardAnimationCurveUserInfoKey] as? NSNumber
            let animationCurveRaw = animationCurveRawNSN?.uintValue ?? UIView.AnimationOptions.curveEaseInOut.rawValue
            let animationCurve:UIView.AnimationOptions = UIView.AnimationOptions(rawValue: animationCurveRaw)
            if #available(iOS 11.0, *) {
                newHeight = keyboardFrame.cgRectValue.height - self.view.safeAreaInsets.bottom
            } else {
                newHeight = keyboardFrame.cgRectValue.height
            }
            let keyboardHeight = newHeight  + 10
            UIView.animate(withDuration: duration,
                           delay: TimeInterval(0),
                           options: animationCurve,
                           animations: {
                            self.view.passwordBottom.constant = keyboardHeight
                            self.view.layoutIfNeeded() },
                           completion: nil)
        }
    }  
}

1 Ответ

0 голосов
/ 10 октября 2019

passwordBottom - это атрибут вашего венчурного капитала, а не ваш взгляд.

Изменение: self.view.passwordBottom.constant = keyboardHeight

на: self.passwordBottom.constant = keyboardHeight

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