Авторазметка ImageView Высота Якорь конфликтует в представлении коллекции и работает неправильно - PullRequest
0 голосов
/ 28 июня 2019

Я получаю эту проблему, когда у меня есть это изображение Представление внутри ячейки представления коллекции и в функции настройки cellForRow Я устанавливаю привязку высоты представления изображения в зависимости от того, содержит ли объект модели изображение или нет. Если оно содержит изображение, высота 200, иначе это 1. Теперь я получаю эту ошибку.

Кажется, ошибка изначально исправляет ограничение, и когда представление коллекции загружается впервые, я могу правильно просматривать ячейки. Только после того, как я перезагружаю представление коллекции, я сталкиваюсь с вопросом о ячейках, не показывающих изображение, или, скорее, высота просмотра изображения равна 1, где это должно быть 200. Таким образом, якорь высоты '1' получает приоритет над 200 единицей.

  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:0x600001643d40 UIView:0x7fd7fdea2ac0.height == 200   (active)>",
        "<NSLayoutConstraint:0x60000165eb70 UIView:0x7fd7fdea2ac0.height == 1   (active)>"
    )

Я изменил приоритеты, но это тоже не сработало:

   if post.postMedia.isEmpty {
            cell.postMedia.heightAnchor.constraint(equalToConstant: 1).isActive = true
            cell.postMedia.heightAnchor.constraint(equalToConstant: 1).priority = UILayoutPriority(rawValue: 999)
        }else {
            cell.postMedia.heightAnchor.constraint(equalToConstant: 200).isActive = true
            cell.postMedia.heightAnchor.constraint(equalToConstant: 200).priority = UILayoutPriority(rawValue: 1000)
        }

postMedia is the array that contains images. If it is empty the height anchor is 1 and priority is set to 999. and 200 one is given 1000. But that still doesn't work. Is there anything else I can do when two constraints are conflicting one another? 

Будем благодарны за помощь.

1 Ответ

0 голосов
/ 28 июня 2019

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

Вы можете сделать свойство необязательным:

var heightConstraint: NSLayoutContraint?

и создать его, еслиэто nil когда ячейка загружена, в противном случае просто обновите heightConstraint.constant = 200 (или 1).

let height: CGFloat = post.postMedia.isEmpty ? 1 : 200
if cell.heightConstraint == nil {
    cell.heightConstraint = cell.postMedia.heightAnchor.constraint(equalToConstant: height)
    cell.heightConstraint?.isActive = true
} else {
    cell.heightConstraint.constant = height
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...