2016-10-30 2 views
0

(iOS 8 с раскадровки) У меня есть подходящая деталь UITableViewCell на моем столеView.Динамический UITableViewCell высота не работает

В раскадровке титров и правой Detail метки устанавливаются numberoflines = 0

Мой код:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    keyArray = [[NSMutableArray alloc]init]; 
    self.table.estimatedRowHeight = 140.0; 
    self.table.rowHeight = UITableViewAutomaticDimension; 
    [spinner startAnimating]; 
    [self cleanJson:prunedDictionary]; 

} 

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return UITableViewAutomaticDimension; 
} 

- (CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath{ 
    return UITableViewAutomaticDimension; 

} 

В конце cleanJson я бегу [self.table reloadData]. TableViewCell изменяет размер, но все они изменяются на один размер и, по-видимому, имеют размер по умолчанию. (Причина, по которой я знаю, что они изменяются по размеру, заключается в том, что в Storyboard я установил высоту 200 и все они были изменены до меньшего размера, когда приложение запустилось)

Почему они не изменяют размер правильно?

+0

Ваши ограничения, скорее всего, не так. Можете ли вы добавить их на свой вопрос? –

+0

@d.felber Нет ограничений, поскольку, как я уже упоминал, это не пользовательская ячейка. Поэтому у меня уже есть ограничения, насколько я знаю – huddie96

ответ

1

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

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

0

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

как это:

вершина надтаблицы

Запас ограничения

вид

Запас ограничение

.

.

.

.

вид

Запас ограничение

дно надтаблицы.

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

Это линейная функция

finalheight = topmargin + viewHeight + margin + viewHieght..etc....etc..bottommargin 
+0

Это не обычная ячейка. Так что ограничения уже установлены. Я считаю, – huddie96

+0

Можете ли вы проверить, что это действительно так? Предположения - единственный злейший враг в отладке. –

+0

Что это не пользовательская ячейка? Я могу проверить, что да. Эти пользовательские ячейки не требуют ограничений. Почти положительный. – huddie96

0

Существует на самом деле путь - но я предпочел бы создавать пользовательские UITableViewCell:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    let cell = self.tableView(tableView, cellForRowAt: indexPath) 
    let targetSize = CGSize(width: self.tableView.bounds.width, height: CGFloat.infinity) 

    return cell.systemLayoutSizeFitting(targetSize, 
             withHorizontalFittingPriority: 1000, 
             verticalFittingPriority: 900).height 
} 
Смежные вопросы