Пользовательское перо UITableViewCell высота - PullRequest
9 голосов
/ 06 января 2011

Я создал пользовательский UITableViewCell в IB, связал его со свойством контроллера корневого представления и настроил его в CellForRowAtIndexPath.Но высота моих нарисованных ячеек не соответствует тому, что я установил в IB, совет?Вот несколько скриншотов и код.alt text

alt text

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *AddressCellIdentifier = @"AddressCellIdent";

    UITableViewCell *thisCell = [tableView dequeueReusableCellWithIdentifier:AddressCellIdentifier];
    if (thisCell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"AddressCell" owner:self options:nil];
        thisCell = addressCell;
        self.addressCell = nil;
    }

    return thisCell ;
}

addressCell является @property (неатомным, назначить) IBOutlet UITableViewCell * addressCell; и связан в IB с владельцем файла (таблицаконтроллер представления).

Я использую пример из руководства по программированию представления таблицы Apple.

Ответы [ 6 ]

7 голосов
/ 19 июля 2012

В IB есть два места, где вам нужно установить высоту строки. Сначала настраиваемая высота строки для самой ячейки. Нажмите на ячейку, размер которой хотите изменить, затем нажмите инспектор размера (линейку) в окне «Утилиты» справа. Установите высоту строки в верхней части раздела Ячейка табличного представления. Установите флажок «Пользовательский». Затем нажмите на табличное представление в окне «Структура документа» слева. Вернитесь к инспектору размера в окне «Утилиты» справа и установите желаемую высоту для высоты строки для всей таблицы.
С этой реализацией вам не нужно добавлять какой-либо код в ваш tableviewcontroller.

5 голосов
/ 06 января 2011

Метод -tableView:heightForRowAtIndexPath: делегата является одним из подходов, как говорит WrightsCS. Другой вариант, если все строки будут иметь одинаковую высоту, - установить свойство rowHeight самого табличного представления . (Преимущество первого состоит в том, что вы можете возвращать произвольные значения для каждой строки.)

5 голосов
/ 06 января 2011

Вы можете отрегулировать высоту ячейки с помощью:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    CGFloat result;
    result = 120.0f;
    return result;
}

Это будет работать с пользовательскими ячейками.

2 голосов
/ 23 июля 2013

Это то, что я делаю при создании табличного представления, чтобы высота строки соответствовала высоте строки, определенной в кончике ячейки:

- (UITableView *)tableView
{
    if (_tableView == nil) {
        _tableView = [[UITableView alloc]
                      initWithFrame:self.view.bounds
                      style:UITableViewStylePlain];
        _tableView.dataSource = self;
        _tableView.delegate = self;

        [_tableView
         registerNib:[UINib nibWithNibName:@"<CELL NIB NAME>" bundle:nil]
         forCellReuseIdentifier:kCellIdentifier];

        // Get the cell's root view and set the table's 
        // rowHeight to the root cell's height.
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"<CELL NIB NAME>"
                                                     owner:self
                                                   options:nil];
        UIView *cellView = (UIView *)nib[0];
        if (cellView) {
            _tableView.rowHeight = cellView.bounds.size.height;
        }        
    }
    return _tableView;
}

Надеюсь, это поможет.

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

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

   if (indexPath.row == 0) {
      return self.cell0.contentView.bounds.size.height;
   }
   if (indexPath.row == 1) {
      return self.cell1.contentView.bounds.size.height;
   }
   if (indexPath.row == 2) {
      return self.cell2.contentView.bounds.size.height;
   }

   return 44.0;
}

Не забудьте загрузить свои ячейки в - (void) viewDidLoad

[[NSBundle mainBundle] loadNibNamed:@"YourView" owner:self options:nil];
0 голосов
/ 12 октября 2018

Для людей, которые все еще заинтересованы в альтернативном ответе и не хотят внедрять heightForRowAtIndexPath, хорошие новости:).

Вы можете установить высоту строки в формате xib следующим образом:

enter image description here

Этого недостаточно. На самом деле это будет полностью игнорироваться во время выполнения. Решение состоит в том, чтобы установить размер эксцентрика, устанавливая верхние и нижние ограничения содержимого ячейки. Контент будет сдвигать верх и низ своего контейнера, что приведет к увеличению ячейки:).

enter image description here

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