Неправильный размер UITableView с использованием маски автоматического изменения размера
-
19-09-2019 - |
Вопрос
У меня есть UITableView, размер которого не изменяется должным образом с помощью autoresizeMask (в iPhone 3.0).
UITableView находится внутри UIViewController внутри UINavigationController внутри UITabBarController, все из которых создаются программно.Видна строка состояния.
Код UIViewController в основном представляет собой:
- (void)loadView {
UIView* rootView = [[UIView alloc] init];
self.view = rootView;
[rootView release];
}
- (void)viewDidLoad {
[super viewDidLoad];
// table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-20-49-44)];
table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
[self.view addSubview:table];
}
При создании подобным образом UITableView немного больше, чем доступное пространство.Если я не ошибаюсь, он ровно на 44 пикселя больше, чем размер панели навигации.
Однако, если я раскомментирую закомментированную строку и прокомментирую следующую строку, размер UITableView будет совершенно правильным.Я бы предпочел использовать autoresizingMask вместо ручного вычисления размера UITableView.Что я делаю не так?
Заранее благодарю вас!
Решение
Проблема, похоже, в том, что я не устанавливал фрейм корневого представления в loadView.Если вы определите такой фрейм, а затем определите фрейм вложенных представлений по отношению к этому фрейму, то маски автоматического изменения размера правильно изменят размер вложенных представлений в соответствии с тем, как фреймворк изменил размер корневого представления.
Например:
- (void)loadView {
UIView* rootView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
self.view = rootView;
[rootView release];
}
- (void)viewDidLoad {
[super viewDidLoad];
table = [[UITableView alloc] initWithFrame:self.view.frame];
table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
[self.view addSubview:table];
}
Спасибо Колину Гисласону, который указал мне правильное направление.
Другие советы
Маска автоматического изменения размера не поможет вам с первоначальным размером табличного представления.Табличное представление создается с помощью рамки, которую вы ему задаете.Маска автоматического изменения размера определяет правила изменения размера этого фрейма относительно родительского представления при изменении родительского фрейма.
Таким образом, если я определю таблицу размером 320x100, она останется такого размера, если я не изменю ее явно или не изменится рамка родительского представления.
В зависимости от других представлений вы могли бы выполнить вычисление на основе других представлений, хранимых родительским объектом или самим родительским фреймом.
Создайте подкласс UIViewController вместо подкласса UITableViewController.
вставьте экземпляр UITableView.
в NIB просто перетащите UIView
поверх этого мы разместим существующий объект UITableView.
установите размер uitableview с помощью метода nib или viewDidLoad.
установите ссылку, источник данных и делегируйте через nib.
теперь он просто передает класс UIViewController и может изменять размер tableview по своему усмотрению.