2016-03-22 3 views
0

screenShot when keyboard is appear Image wheh keyboard is not presentImage of the storyboar : UITableView проблема отображения Cell

У меня есть UITableView, сверху и снизу расстояние до надтаблицы 0. При появлении клавиатуры я обновить нижнее ограничение, так что клавиатура не будет скрывать таблицу. Но при обновлении нижнего ограничения последние две или три ячейки не полностью видны. Я использую следующий код для обновления нижнего ограничения.

func keyboardWillChangeFrameWithNotification(notification: NSNotification, showsKeyboard: Bool) { 
let userInfo = notification.userInfo! 
    let animationDuration: NSTimeInterval = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue 

    // Convert the keyboard frame from screen to view coordinates. 
    let keyboardScreenBeginFrame = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue() 

    if showsKeyboard 
    { 
     cntInputViewBottom.constant = keyboardScreenBeginFrame.size.height 

    } 
    else 
    { 
     cntInputViewBottom.constant = 0 
    } 
} 
+0

Привет, Аашиш, можете ли вы добавить некоторые фотографии раскадровки и скриншот симулятора, когда он скрыт. –

+0

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

+0

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

ответ

0

Вы используете UIKeyboardFrameBeginUserInfoKey. Это размер клавиатуры в начале анимации смены кадров. Лучше использовать UIKeyboardFrameEndUserInfoKey, чтобы получить окончательный кадр.

+0

Высота клавиатуры будет одинаковой в обоих случаях. Изменяется только позиция y. Так что все должно работать идеально. –

+0

Y позиций **. ** пункт. – kelin

0

если x - высота представления с кнопкой отправки.

if showsKeyboard 
{ 
    cntInputViewBottom.constant = keyboardScreenBeginFrame.size.height+ x 

} 
else 
{ 
    cntInputViewBottom.constant = x 
} 
0

Проблема заключается в том, что вы не сообщают о своем представлении/контроллере, чтобы обновить свои ограничения до и после.

if showsKeyboard 
{ 
    self.view.layoutIfNeeded() 
    cntInputViewBottom.constant = keyboardScreenBeginFrame.size.height 
    self.view.layoutIfNeeded() 
} 
else 
{ 
    self.view.layoutIfNeeded() 
    cntInputViewBottom.constant = 0 
    self.view.layoutIfNeeded()  
} 

просто добавить self.view.layoutIfNeeded() перед тем & после обновления ограничения, как показано.