2016-11-27 4 views
1

У меня есть кнопка в моем swift приложении, которое находится в нижней части экрана. Ограничения для этого являются:, когда клавиатура появляется в моем приложении, кнопка частично перемещается вверх (только текст кнопки перемещается)

enter image description here

Я также прилагается розетка для ограничения, отделяющей мою кнопку в нижней части экрана:

enter image description here

Когда я запустить приложение, я вижу, что я (я добавил некоторый цвет backgroun, чтобы мой пример был хорошо виден):

enter image description here

сейчас, странная вещь происходит - когда клавиатура показывает, текст на кнопке движется вверх, синий фон остается там, где это было:

enter image description here

А также видимая часть кнопки не нажимать на все.

Это какая-то ошибка или проблема в моей реализации?

Мой код достаточно прост для этого:

@IBOutlet weak var continueUsernameBottomConstraint: NSLayoutConstraint! 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 


    NotificationCenter.default.addObserver(self, selector: #selector(tutorialKeyboardWillAppear), name: .UIKeyboardWillShow, object: nil) 

    NotificationCenter.default.addObserver(self, selector: #selector(tutorialKeyboardWillDisappear), name: .UIKeyboardWillHide, object: nil) 

} 


func tutorialKeyboardWillAppear(notification: NSNotification){ 
    print("KEYBOARD APPEARS") 
    let endFrame = ((notification as NSNotification).userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue 

    continueUsernameBottomConstraint.constant = view.bounds.height - endFrame.origin.y 

    self.view.layoutIfNeeded() 
} 

func tutorialKeyboardWillDisappear(notification: NSNotification){ 

    print("KEYBOARD DISAPPEARS") 
    let endFrame = ((notification as NSNotification).userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue 

    continueUsernameBottomConstraint.constant = view.bounds.height - endFrame.origin.y 

    self.view.layoutIfNeeded() 

} 
+0

continueUsernameBottomConstraint.constant = view.bounds.height - endFrame.origin.y в обоих keyboardWillAppear и исчезают не отлично смотрится для меня. Вместо этого, если вы хотите пойти с ограничением в keyboardWillAppear: continueUsernameBottomConstraint.constant = continueUsernameBottomConstraint.constant + keyBoardHeight и в willDisappear continueUsernameBottomConstraint.constant = continueUsernameBottomConstraint.constant - keyBoardHeight. – Dili

+0

Предпочитаемый вариант Apple - использовать scrollView для случаев, где отображается клавиатура. Или в этом случае даже вы можете переместить весь экран вверх и добавить клавиатуру снизу. – Dili

ответ

2

Используйте этот

func tutorialKeyboardWillAppear(notification: NSNotification){ 
    print("KEYBOARD APPEARS") 
    let endFrame = ((notification as NSNotification).userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue 
    continueUsernameBottomConstraint.constant = continueUsernameBottomConstraint.constant + CGFloat(endFrame.height) 
    self.view.layoutIfNeeded() 
} 

func tutorialKeyboardWillDisappear(notification: NSNotification){ 

    print("KEYBOARD DISAPPEARS") 
    let endFrame = ((notification as NSNotification).userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue 
    continueUsernameBottomConstraint.constant = continueUsernameBottomConstraint.constant - CGFloat(endFrame.height) 
    self.view.layoutIfNeeded() 

} 
+0

Спасибо, человек, это сработало, странно, почему предыдущий не работал, но да, если есть альтернативное решение, я не собираюсь слишком много думать, почему другой подход не сработал ... – user3766930

Смежные вопросы