Проблема с кадром UINavigationController и UITableView

self.tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];

Как мне получить правильный размер из представления, когда у меня есть UINavigationController и UITabBarController?

Чтобы обойти это, я должен сделать:

CGRect frame = self.view.frame;
frame.origin.y -= [UIApplication sharedApplication].statusBarFrame.size.height;
tableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStylePlain];

Мне всегда приходится вручную устанавливать высоту моих представлений/таблиц, чтобы поместиться в UINavigationController, и это действительно раздражает.

Это кажется странным, почему бы ему не вычесть высоту строки состояния автоматически? Это стиль по умолчанию, а не прозрачная строка состояния.

Спасибо

ОБНОВЛЕНИЕ: если я выделяю tableView ПОСЛЕ метода init, просто установка фрейма на self.view.frame работает нормально. Wuzzup с этим?


person runmad    schedule 17.02.2011    source источник


Ответы (1)


Установка кадра UINavigationController перед методом init не будет работать, поскольку UINavigationController еще не загружен и не отображен. Фрейм устанавливается только после загрузки контроллера и его представления.

Вы должны настроить свою таблицу (и все подобные инициализации) в методе viewDidLoad UINavigationController. Если вы это сделаете, вы не увидите никаких проблем такого рода.

person Code Slinger    schedule 17.02.2011
comment
Или после загрузки представления вызов setNeedsLayout может решить проблему. - person Andrei Stanescu; 18.02.2011