Неправильный размер UITableView при использовании autoresizingMask - PullRequest
1 голос
/ 15 декабря 2009

У меня есть 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. Что я делаю не так?

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 17 декабря 2009

Кажется, проблема в том, что я не устанавливал рамку корневого представления в 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];
}

Спасибо Колину Гисласону, который указал мне правильное направление.

1 голос
/ 15 декабря 2009

Маска авторазмера не поможет вам с начальным размером представления таблицы. Представление таблицы создается с заданной вами рамкой. Маска авторазмера определяет правила изменения размера этого фрейма относительно родительского представления при изменении фрейма родителя.

Таким образом, если я определю таблицу размером 320x100, он останется с таким размером, если я не изменю его явно или не изменится рамка родительского представления.

В зависимости от других представлений вы можете выполнять вычисления на основе других представлений, принадлежащих родителю или самому фрейму родителя.

0 голосов
/ 03 мая 2012

Создание подкласса UIViewController вместо подкласса UITableViewController.

вставить экземпляр UITableView.

в NIB просто перетащите UIView

поверх этого wier размещаем существующий объект UITableVIew.

установить размер uitableview с помощью метода nib или viewDidLoad.

установить ссылку, источник данных и делегат через перо.

Теперь просто перенесите класс UIViewController и можете изменять размер представления таблицы по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...