iphone: Как изменить размер представления и всех его дочерних элементов (в случае появления клавиатуры)? - PullRequest
1 голос
/ 23 ноября 2011

У меня есть приложение для iPhone. Представление состоит из двух дочерних элементов: представление таблицы высотой 400 пикселей и представление uitext в нижней части представления высотой около 80 пикселей.

Я пытаюсь переместить текстовое представление и табличное представление вверх, когда клавиатура видна. Я изменил «основной» вид, чтобы сделать его меньше. Почему его дети, кажется, не меняют размеры? Нужно ли перенастраивать рамку просмотра таблицы, а также перенастраивать рамку просмотра текста? Мне просто интересно, каково ожидаемое поведение. Нужно ли использовать setNeedsLayout () или setNeedsDisplay?

Я ожидал, что из-за уменьшения "основного" представления его потомки будут "сжаты" и также будут ограничены родительским представлением. Похоже, текстовый вид остается в нижней части экрана. Представление таблицы выглядит правильным (сокращено), но текстовое представление не выглядит так, как будто оно движется. Хотя в новом сокращенном виде теперь есть белая область, в которую текстовое представление должно перейти.

// Called when the UIKeyboardDidShowNotification is sent.

- (void) клавиатураWasShown: (NSNotification *) aNotification {

NSLog(@"keyboard was shown");
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
//CGRect keyboardFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue];
NSLog(@"kb size is:%f",kbSize.height);

//UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);

CGRect newFrame = self.view.frame;
//20 status bar height, 44 is nav bar height
newFrame.size.height = 480 -20 - 44 - kbSize.height;

self.view.frame = newFrame;
self.view.layer.borderWidth = 1.0f;
self.view.layer.borderColor = [[UIColor redColor] CGColor]; 

[self.view setNeedsLayout];
[self.view setNeedsDisplay];

}

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Попробуйте использовать UIScrollView. Поместите эти элементы управления в scrollview и используйте свойство contentOffset для прокрутки вверх / вниз. Это очень простой способ.

Удачи!

0 голосов
/ 23 ноября 2011

Используйте UIScrollView для своего содержимого.

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

...