Динамическая высота ячейки UITableView с AutoLayout с метками динамического типа
Я реализую свои ячейки таблицы, используя AutoLayout, чтобы показать изображение и 2 метки, используя Dynamic Type для адаптивного размера шрифта.
Я реализовал смету HeightForRowAtIndexPath, которая имеет смысл и проста в использовании.
Я не использую конструктор интерфейса для ячеек. Вместо этого я использую масонство, которое не должно иметь никакого значения.
В настоящее время я борюсь с расчетом фактической высоты ячейки. Вычислять его вручную сложно и сложно при обновлении кода автоматической разметки.
Я нашел этот ответ StackOverFlow:Использование Auto Layout в UITableView для динамического размещения ячеек и переменной высоты строк Это решение должно также заботиться о различных размерах шрифта, но не работает для меня.
Когда у меня есть система AutoLayout, подобная этой: UILabel к верху contentView с отступом, другая UILabel к низу contentView с отступом, он должен автоматически вычислять высоту ячейки.
Но вместо этого это приводит к следующему конфликту AutoLayout:
UIView property translatesAutoresizingMaskIntoConstraints)
(
"<MASLayoutConstraint:0xc506be0 UIImageView:0xc5070a0.height == 150>",
"<MASLayoutConstraint:0xc506d90 UIImageView:0xc5070a0.top == UITableViewCellContentView:0xc5076e0.top + 10>",
"<MASLayoutConstraint:0xc506990 UILabel:0xc507450.top == UIImageView:0xc5070a0.bottom + 10>",
"<MASLayoutConstraint:0xc506630 UILabel:0xc507260.top == UILabel:0xc507450.bottom>",
"<MASLayoutConstraint:0xc506530 UILabel:0xc507260.bottom == UITableViewCellContentView:0xc5076e0.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0xc3d05a0 UITableViewCellContentView:0xc5076e0.height == 44>"
)
Я использую следующий код AutoLayout:
[self.subtitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.titleLabel.mas_bottom);
make.right.equalTo(self.contentView.mas_right).with.offset(-GCBaconCellRowPadding);
make.left.equalTo(self.contentView.mas_left).with.offset(GCBaconCellRowPadding);
make.bottom.equalTo(self.contentView.mas_bottom);
}];
Последняя строка должна указывать, что высота ячейки увеличивается.
Глядя на вывод конфликта AutoLayout, похоже, что он хочет автоматически установить высоту 44.0, что является значением по умолчанию.
редактировать: Установка для contentView translationsAutoresizingMaskIntoConstraints значения NO
self.contentView.translatesAutoresizingMaskIntoConstraints = NO;
при создании ячейки исправляет коллизию, но в результате высота строки равна нулю.