У меня есть пользовательский UIView, который я установил в свойство tableHeaderView UITableView при загрузке:При вращении устройства вид практически исчезает.При повороте назад представление теперь больше, чем пространство для заголовка и скрывает некоторые ячейки в таблице.
Для устранения неполадок я переопределил метод setFrame в моем пользовательском классе представления:
- (void) setFrame:(CGRect)frame {
[super setFrame:frame];
NSLog(@"%@ - %@", NSStringFromSelector(_cmd), NSStringFromCGRect(frame));
}
Я также поставил точку останова в операторе NSLog, чтобы увидеть то, что называется setFrame, и получил некоторые странные результаты, которые не могу объяснить, и надеюсь, что кто-то сможет пролить свет на то, что происходит и почему.
Во время загрузки View
1. initWithFrame calls: setFrame: - {{0, 0}, {320, 120}}
2. sizeToFit calls: setFrame: - {{0, 0}, {320, 109}}
3. setTableHeaderView calls: setFrame: - {{0, 0}, {320, 109}}
4. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {320, 109}}
5. _resizeWithOldSuperviewSize calls: setFrame: - {{0, 0}, {320, 65}}
6. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {320, 65}}
7. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {320, 65}}
Поворот устройства влево
1. _resizeWithOldSuperviewSize calls: setFrame: - {{0, 0}, {480, 0}}
2. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {480, 0}}
3. _resizeWithOldSuperviewSize calls: setFrame: - {{0, 0}, {480, 12}}
4. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {480, 12}}
Поворот устройства вправо
1. _resizeWithOldSuperviewSize calls: setFrame: - {{0, 0}, {320, 172}}
2. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {320, 172}}
3. _resizeWithOldSuperviewSize calls: setFrame: - {{0, 0}, {320, 160}}
4. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {320, 160}}
Что объясняет, почему мой вид выглядит сначала усеченным, затем почти исчезает и в конечном итоге перекрывает ячейки.Похоже, что _resizeWithOldSuperviewSize
является виновником, и я не понимаю, почему он вызывается и откуда он получает эти странные значения.
У меня действительно большая работа, вызывая [self.tableView.tableHeaderView sizeToFit]
в viewDidAppear:
и didRotateFromInterfaceOrientation:
, который возвращает рамку к правильному размеру, но перерисовка ужасна, поскольку оба происходят после того, как вид виден или после анимации вращения.Попытка установить это в любое время до того, как представление станет видимым, заставит _resizeWithOldSuperViewSize
установить кадр обратно в эти нечетные размеры.