2015-09-30 5 views
0

Если текстовое поле открывает клавиатуру, а текстовое поле является членом tableView, то она сможет прокручивать tableView, чтобы иметь возможность видеть последний элемент, а клавиатура не будет скрывать этот элемент.tableView vs. scrollView поведение при появлении клавиатуры

enter image description here

Как? UITableView наследуется от UIScrollView. Думаю, открытие клавиатуры увеличивает смещение содержимого? Я прав?

Если текстовое поле является частью scrollView, а не tableView, то этого эффекта не будет, и клавиатура может скрывать другие элементы управления, расположенные в нижних частях scrollView.

Если я хочу увидеть тот же эффект с scrollView, как и с tableView, должен ли я устанавливать смещение содержимого вручную?

enter image description here

+0

Привет, Янош, возможно, вы также найдете более полезные ответы и идеи здесь: http://stackoverflow.com/questions/1126726/how-to-make-a-uitextfield-move-up-when-keyboard-is-present – Jelan

ответ

1

Да, вы должны установить ваше содержание смещения вручную.

Сначала вы зарегистрироваться для уведомления

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name:UIKeyboardWillShowNotification, object: nil) 
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name:UIKeyboardWillHideNotification, object: nil) 

И тогда в ваших методах наблюдателей.

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    textField.resignFirstResponder() 
    return true 
} 

func keyboardWillShow(notification:NSNotification){ 

    var userInfo = notification.userInfo! 
    var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue() 
    keyboardFrame = self.view.convertRect(keyboardFrame, fromView: nil) 

    var contentInset:UIEdgeInsets = self.scrollView.contentInset 
    contentInset.bottom = keyboardFrame.size.height 
    self.scrollView.contentInset = contentInset 
} 

func keyboardWillHide(notification:NSNotification){ 

    var contentInset:UIEdgeInsets = UIEdgeInsetsZero 
    self.scrollView.contentInset = contentInset 
} 
+0

Кроме того, я устанавливаю 'contentInset', могу ли я установить' contentSize' тоже? Они независимы? –

+0

Да, вы можете – Imran

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