Определите размер UITableView на iPad - PullRequest
1 голос
/ 14 марта 2012

Я должен разделить ширину стола на 2, 3, 5, ... равные части. Цель состоит в том, чтобы заполнить ячейку таблицы 2, 3, 5, ... квадратными подпредставлениями одинакового размера. (Изображений) Естественно, высота стола зависит от этого.

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

- (CGFloat) rowHeight{

    fcAppAppDelegate *delegate = (fcAppAppDelegate *);

    CGRect      bounds = self.tableView.bounds;
    //CGRect          bounds = self.view.bounds; // Alternative that returns the same result.
    float       tableWidth; 
    if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] delegate].tabBarController.interfaceOrientation))
        tableWidth = bounds.size.width;
    else
        tableWidth = bounds.size.height;

    NSLog (@"tableWidth: %f", tableWidth);
    return tableWidth / [MatrixPhotoListTVC noOfPicsPerRow];
}

Здесь я впервые устанавливаю высоту строки таблицы:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.rowHeight = [self rowHeight];

}

Все отлично работает на iPhone. На iPad, однако, возвращается tableView.bounds или view.bounds (width = 320, heiht = 372). Интересно, что значения верны, когда устройство поворачивается. (ширина = 768, высота = 960)

У кого-нибудь есть объяснение этому? Является ли viewDidLoad подходящим местом для определения размера таблицы?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Некоторые говорят об этом - в данном случае при написании вопроса - все имеет значение.

Однако, это может случиться и с другими, и поэтому я держу вопрос в системе.Это ответ:

viewDidLoad вызывается сразу после загрузки представления.Это означает, что в большинстве случаев он был загружен из файла Nib.Файл пера, который я использовал, предназначен только для iPhone, а не для размеров iPad.Именно поэтому размеры представлений точно такие же, как в IB.

Я переместил вызов из viewDidLoad в viewWillAppear, и там он работает нормально.По-видимому, iOS автоматически изменяет размер представления для iPad (что и делает хорошо) между вызовами viewDidLoad и viewWillAppear.

Если кто-то знает лучшее место с академической или документальной точки зрения, где я мог бы сделать звонок, тогда подсказка очень ценится.

Тем не менее, теперь, похоже, работает нормально.

0 голосов
/ 14 марта 2012

Я бы переключил ваш код на методы -viewWillAppear или -viewDidAppear, так как любое представление уже было выполнено с помощью табличного представления.

Другая возможность, если UITableView является подклассом, это создание подкласса метода:

- (void)layoutSubviews {
    [super layoutSubviews];
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...