Свойство высоты tableHeaderView UITableView изменено на странные значения во время загрузки и вращения

У меня есть собственный UIView, который я установил для свойства tableHeaderView UITableView во время loadView:

headerView = [[MYViewClass alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 120)];
[headerView sizeToFit];

self.tableView.tableHeaderView = headerView;

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

Для устранения неполадок я переопределил метод setFrame в своем пользовательском классе представления:

- (void) setFrame:(CGRect)frame {
    [super setFrame:frame];
    NSLog(@"%@ - %@", NSStringFromSelector(_cmd), NSStringFromCGRect(frame));
}

Я также поставил точку останова в операторе NSLog, чтобы я мог видеть то, что называется setFrame, и получил некоторые странные результаты, которые я не могу объяснить и надеюсь, что кто-то сможет пролить свет на то, что происходит и почему.

Во время loadView

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 устанавливает для кадра эти нечетные размеры.

5
задан Magic Bullet Dave 12 February 2012 в 10:53
поделиться