Конфликт высоты динамической ячейки UITableView - высота НЕ зависит от метки

Итак, в моем табличном представлении отображаются изображения. Каждая ячейка в основном представляет собой изображение, заполняющее все ячейки contentView. Поскольку изображения имеют разные соотношения сторон, мне нужно, чтобы мои ячейки регулировали свою высоту в зависимости от ширины представления таблицы и соотношения сторон изображения. Я подписался на этот Рэй Вендерлих учебник, но теперь возникает конфликт ограничений. Размер изображения изменяется путем изменения ограничения высоты imageViews, например. myImageViewHeight.constant = tableView.frame.width / aspectRatio

2016-06-16 13:56:25.823 MyApp[92709:5649464] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. 
Try this: 
    (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 
(
"<NSLayoutConstraint:0x7fbcdaf5c190 V:[UIImageView:0x7fbcdaf5c300(303)]>",
"<NSLayoutConstraint:0x7fbcdaf5b460 V:|-(0)-[UIImageView:0x7fbcdaf5c300]   (Names: '|':UITableViewCellContentView:0x7fbcdaf52230 )>",
"<NSLayoutConstraint:0x7fbcdaf5b4b0 V:[UIImageView:0x7fbcdaf5c300]-(0)-|   (Names: '|':UITableViewCellContentView:0x7fbcdaf52230 )>",
"<NSLayoutConstraint:0x7fbcdaf5e550 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7fbcdaf52230(100)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7fbcdaf5c190 V:[UIImageView:0x7fbcdaf5c300(303)]>

Представление изображения имеет следующие ограничения и имеет ячейки contentView в качестве суперпредставления.

Ограничения

В классе контроллера табличного представления я использую

self.tableView.estimatedRowHeight = 80
self.tableView.rowHeight = UITableViewAutomaticDimension

Я также пробовал это - тот же результат.

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

Я предполагаю, что мне нужно избавиться от 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7fbcdaf52230(100)]>", но как? Кроме того, кто-нибудь знает какую-нибудь документацию/учебники о том, как правильно создавать табличные представления с динамическим содержимым, которые не только охватывают наличие множества меток внутри ячейки? Мой код работает просто отлично, если представление изображения заменено меткой...


person Percolator    schedule 16.06.2016    source источник
comment
удалите ограничение высоты изображения и после проверки. вы устанавливаете верхнее и нижнее ограничение, что вы не устанавливаете ограничение равной высоты.   -  person Bhadresh Kathiriya    schedule 16.06.2016
comment
@Bhadresh Как изображения получат правильную высоту, если ограничение по высоте будет снято?   -  person Percolator    schedule 16.06.2016
comment
вы фиксируете высоту изображения, которая удаляет верхнее и нижнее ограничение и устанавливает центральное ограничение.   -  person Bhadresh Kathiriya    schedule 16.06.2016
comment
@Bhadresh Это решило проблему с конфликтующими ограничениями, но теперь imageView получает те же размеры, что и само изображение (в пикселях). Если изображение имеет высоту 1000 пикселей, представление изображения будет иметь высоту 1000 пикселей. Как мне указать, что высота представления равна ширине представления таблицы/соотношению сторон изображения?   -  person Percolator    schedule 16.06.2016
comment
вы хотите, чтобы изображение отображалось в соотношении сторон ширины, верно?   -  person Anjali Bhimani    schedule 16.06.2016


Ответы (2)


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

person Ahmad Ishfaq    schedule 16.06.2016
comment
Почему приоритет должен быть понижен? - person Rakesha Shastri; 10.01.2019
comment
Проверьте эту ссылку для лучшего понимания stackoverflow.com/questions/43128597/ - person Ahmad Ishfaq; 22.01.2019
comment
Мой вопрос, почему. Я знаю, что он делает. - person Rakesha Shastri; 22.01.2019
comment
Для меня вышеизложенное заставило ячейку изначально отображаться нормально, но если вы покрасите ячейку полупрозрачным цветом, а tableview другим полупрозрачным цветом, вы увидите, что после viewDidLoad высота tableViewCell по-прежнему составляет 44 pts, и вы не можете взаимодействовать скажем, с UISlider, если он находится за пределами этой высоты 44 pt. Если вы сделаете reloadData для tableView на viewDidAppear, это решит эту проблему. Я предполагаю, что Apple тестировала динамическую высоту в ячейках с UILabels, но не с другими UIView, и это ошибка. - person Doug Voss; 28.09.2019
comment
Этот ответ правильный. Но почему мы должны это делать? не имеет смысла, что iOS добавляет активное ограничение высоты для UITableViewCellContentView. И тогда мы должны сделать этот хак. Хак, кажется, необходим только для просмотра изображений. - person RajV; 09.11.2020

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

person Bessi    schedule 28.10.2019