У меня есть пользовательский UIView, который я поставил в собственность tableHeaderView в виде UITableView во loadView:UITableView изменяется на странные значения во время нагрузки и вращения
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
, чтобы установить кадр обратно на эти нечетные размеры.
Извините, но я не думаю, что это все. Я не устанавливаю представление для заголовка раздела, а заголовок для всей таблицы. –