Могу ли я вызвать tableView cellForRowAtIndexPathtableView в heightForRowAtIndexPath, чтобы найти размер ячейки, если у меня есть настраиваемая ячейка? - PullRequest
0 голосов
/ 03 апреля 2012

Могу ли я позвонить tableViewcellForRowAtIndexPathtableView в heightForRowAtIndexPath, чтобы узнать размер ячейки?

Это слишком дорого с точки зрения производительности, если нет, то как еще можно определить высоту ячеек, если она исходит от XIB?

Ответы [ 2 ]

0 голосов
/ 11 июля 2012

Еще один способ сделать это:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static CGFloat cellHeight = 0;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifyer"];
        cellHeight = cell.height;
    });

return cellHeight;
}
0 голосов
/ 03 апреля 2012

Не делай этого.Это все равно не сработает.tableView:heightForRowAtIndexPath: вызывается для всех ваших клеток.И cellForRowAtIndexPath: не будет возвращать ячейки для невидимых indexPaths в любом случае.

Когда tableView:heightForRowAtIndexPath: вызывается в первый раз (сразу после numberOfSectionsInTableView: и tableView:numberOfRowsInSection:), ячейка отсутствует вообще.

Просто проверьте высоту ячейки в конструкторе интерфейсов.Выберите представление UITableViewCell и посмотрите на панель размеров.

enter image description here

Поскольку tableView:heightForRowAtIndexPath: вызывается для каждой ячейки, вы должны установить высоту ячеек в viewDidLoad, если у вас есть только одна высота.Если tableView:heightForRowAtIndexPath: не реализован, он не вызывается, что хорошо, если у вас много ячеек.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.rowHeight = 44.0f;
}

Если у вас разные высоты, определите высоту из вашего источника данных.Например, проверьте объект в indexPath из NSAray вашего dataSource и используйте ту же логику, которую вы используете в tableView:cellForRowAtIndexPath:, чтобы выяснить, какую ячейку использовать.Затем верните соответствующую высоту.


РЕДАКТИРОВАТЬ: я только что проверил и запрос tableView для ячейки в tableView:heightForRowAtIndexPath: вызывает бесконечный цикл.

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