Неправильный размер UITableView с использованием маски автоматического изменения размера

StackOverflow https://stackoverflow.com/questions/1908730

Вопрос

У меня есть 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 по своему усмотрению.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top