Высота содержимого TableView изменена после показа клавиатуры - PullRequest
1 голос
/ 16 февраля 2012

Внизу у меня есть Scroll View, Table View и текстовое поле, которое будет вызывать показ клавиатуры после нажатия. Табличное представление - это просто подпредставление в представлении прокрутки, которое показывает некоторые комментарии к этим фотографиям.

В начале высота tableView отображается правильно. Однако после нажатия любого textField в классе высота tableView изменилась. У любого есть решения для этого.

Я проверил высоту клавиатуры. Это повлияет на дополнительную высоту UITableView. Но я не имею ни малейшего представления о том, как сохранить высоту такой же, как прежде, чем показывает клавиатура.

Пожалуйста, помогите.

Вот некоторые коды,

//---when a TextField view begins editing---
-(BOOL) textFieldDidBeginEditing:(UITextField *)textFieldView {  
        currentTextField = textFieldView;

        return YES;
}  

-(BOOL) textFieldShouldReturn:(UITextField *) textFieldView {  
    [textFieldView resignFirstResponder];
    return NO;
}

//---when a TextField view is done editing---
-(void) textFieldDidEndEditing:(UITextField *) textFieldView {  
    currentTextField = nil;
}

//---when the keyboard appears---
-(void) keyboardDidShow:(NSNotification *) notification {
    if (keyboardIsShown) return;

    NSDictionary* info = [notification userInfo];

    //---obtain the size of the keyboard---
    NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    //---resize the scroll view (with keyboard)---
    CGRect viewFrame = [v_comment_editor frame];
    viewFrame.size.height -= keyboardSize.height;
    v_comment_editor.frame = viewFrame;

    //---scroll to the current text field---
    CGRect textFieldRect = [currentTextField frame];
    [v_comment_editor scrollRectToVisible:textFieldRect animated:YES];

    keyboardIsShown = YES;
}

//---when the keyboard disappears---
-(void) keyboardDidHide:(NSNotification *) notification {
    NSDictionary* info = [notification userInfo];

    //---obtain the size of the keyboard---
    NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    //---resize the scroll view back to the original size (without keyboard)---
    CGRect viewFrame = [v_comment_editor frame];
    viewFrame.size.height += keyboardSize.height;
    v_comment_editor.frame = viewFrame;

    keyboardIsShown = NO;
}

-(void) viewWillDisappear:(BOOL)animated {
    //---removes the notifications for keyboard---
    [[NSNotificationCenter defaultCenter] 
     removeObserver:self 
     name:UIKeyboardWillShowNotification 
     object:nil];
    [[NSNotificationCenter defaultCenter] 
     removeObserver:self 
     name:UIKeyboardWillHideNotification 
     object:nil];
}

Ответы [ 3 ]

0 голосов
/ 16 февраля 2012

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

Если у вас возникли проблемы с одним из подпредставлений, возможно, его маски с автоматическим изменением размера установлены странным образом.

Самый простой способ обойти это - иметь переменную экземпляра в вашем классе обработки, например:

CGRect tableframe;

и сохраните в нем правильный кадр в функции keyboarddidshow и восстановите исходный кадр таблицы в методе ** keyboardDidHide **.

0 голосов
/ 17 февраля 2012

Для всех остальных людей, если у вас снова возникнет эта проблема.

Решение, которое я использовал для этого, состоит в том, чтобы снова сбросить размер в keyboardDidHide, и код такой:

CGRect frame = tbl_comment.frame;
    frame.size.height = 145;
    tbl_comment.frame = frame;
0 голосов
/ 16 февраля 2012

Может помочь при просмотре свойств UIScrollView contentOffset и contentInset. Также это поможет понять разницу между bounds scrollView и frame.

Я настоятельно советую создать простой тестовый проект и поэкспериментировать с вышеуказанными концепциями. Тщательное понимание сделает вашу жизнь намного проще.

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

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