2016-04-19 8 views
0

У меня есть UIViewController с двумя встроенными контейнерами и одним текстовым полем. Пока пользователь набирает текстовое поле, весь экран движется вверх, поэтому клавиатура может поместиться, не закрывая нижнюю часть контейнеров. Вот как это выглядит в моей раскадровку:Как я могу переместить мой контейнер вверх, когда пользователь быстро отображает экранную клавиатуру?

enter image description here

Мой код выглядит следующим образом:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard") 
    // view.addGestureRecognizer(tap) 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillChangeFrameNotification, object: nil) 

} 

func keyboardWillShow(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() { 

     if(isKeyboardShown == false){ 
      realKeyboardSize = CGRect(x: keyboardSize.origin.x, y: keyboardSize.origin.y, width: keyboardSize.width, height: keyboardSize.height) 
      isKeyboardShown = true 
      self.view.frame.origin.y -= realKeyboardSize!.height 
     }else{ 
      isKeyboardShown = false 
      self.view.frame.origin.y += realKeyboardSize!.height 

     } 
    } 
} 

Можно ли перемещать нижний контейнер вверх, а не на весь экран?

Я предполагаю, что это работает так:

topContainer остается нетронутым, lowerContainer перемещается вверх так, что половина из них скрывается за topContainer и клавиатура видна. Когда пользователь скрывает клавиатуру, все возвращается к норме.

+0

Вы используете проверку автозапуска http://stackoverflow.com/questions/31356293/uitableview-and-uiview-with-keyboardwillshow/31356527#31356527 –

+0

спасибо, я сделал то, что вы предложили и добавил эти строки в viewDidLoad: 'NSNotificationCenter.defaultCenter(). addObserver (self, selector: Selector (" keyboardWillShow: "), name: UIKeyboardWillShowNotification, object: nil) NSNotificationCenter.defaultCenter(). addObserver (self, selector: Selector (" keyboardWillHide : "), name: UIKeyboardWillHideNotification, object: nil)' Но теперь, когда я нажимаю текстовое поле, он полностью исчезает :) Я попытался добавить только 'keyboardWillShow', а затем контейнер перемещается вверх, но я не вижу собственно клавиатуру. . – user3766930

+0

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

ответ

1

Если вы используете autolayout, вы можете добиться этого путем изменения нижнего ограничения выполнения

Вот иерархия и связанное с ними ограничение ..

enter image description here

О том, как он работает и как настроить вещи проверить this link

и Here is the demo, если вы не понимаете

1

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

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

  • Нет связанных вопросов^_^