1

У меня есть UITableView, который не изменяется с правильной настройкой с помощью autoresizeMask (в iPhone 3.0).Неверный размер UITableView с использованием autoresizingMask

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

Спасибо заранее!

ответ

2

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

Благодаря Colin Gislason, который указал мне в правильном направлении.

1

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

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

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

+0

Спасибо за быстрый ответ, Колин. Маска авторезистирования делает что-то. Вид таблицы создается с размером 320x100, и все же он заполняет весь экран. Я могу изменить 100 до 200, и размер будет таким же. – hpique

+0

И если вы не установите маску авторезистирования, но все же установите ее на 320x100, она не заполняет весь экран? –

+0

Правильно. При отсутствии маски автоматической настройки вид таблицы будет соответствовать размеру кадра. – hpique

0

Создать подкласс подпрограммы UIViewController подкласса UITableViewController.

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

в СИБ просто перетащить UIView

на вершине этого Wier месте существующего объекта UITableView.

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

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

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

+0

Работает ли она с статическими табличными представлениями? – Claus

+0

привет Клаус, Я пробую его с динамическим контентом. но он будет работать со статическим контентом ... – damithH