Странное поведение автозапуска при просмотре коллекций

У меня проблема с автозапуском, консоль сообщает о проблемах с представлением изображения, которое у меня есть в ячейке:

RefreshCatalogue[31754:16177989] 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. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7fa98103b740 V:[UIImageView:0x7fa9810375d0]-(0)-|   (Names: '|':UIView:0x7fa9810371d0 )>",
    "<NSLayoutConstraint:0x7fa98103b7e0 V:|-(0)-[UIImageView:0x7fa9810375d0]   (Names: '|':UIView:0x7fa9810371d0 )>",
    "<NSLayoutConstraint:0x7fa98103b8d0 UIImageView:0x7fa9810375d0.centerY == UIImageView:0x7fa981037490.centerY>",
    "<NSLayoutConstraint:0x7fa98103ba60 UIImageView:0x7fa981037490.top == UIView:0x7fa9810371d0.topMargin + 71>",
    "<NSAutoresizingMaskLayoutConstraint:0x7fa980d44a10 h=--& v=--& V:[UIView:0x7fa9810371d0(50)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7fa98103b8d0 UIImageView:0x7fa9810375d0.centerY == UIImageView:0x7fa981037490.centerY>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

Проблема в том, что если я делаю:

[self.collectionView reloadItemsAtIndexPaths:@[indexPath]];

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

[self.collectionView reloadData];

Ошибка все еще существует, но изображение отображается. Код открыт здесь, кто-нибудь заинтересован в том, чтобы взглянуть: https://github.com/Ridiculous-Innovations/RefreshCatalogue

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

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

Ответ 1

У вас проблема с UIImageView: 0x7fa981037490.top == UIView: 0x7fa9810371d0.topMargin + 71 и родительский фрейм с 0 высотой (поэтому высота изображения должна быть отрицательной, но это недопустимо), например, сразу после вызова метода dequeueReusableCell. Возможным обходным путем для этого случая является приоритет изменения от 1000 до 999 при самом нижнем ограничении в вложенном виде (Вертикальное пространство - catalogueHeaderCell - Изображение и Вертикальное пространство - catalogueCell - Info View).

Ответ 2

введите описание изображения здесь

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

удалите выделенные ограничения.

Ответ 3

Просмотров:

UIView:0x7fa9810371d0, назовите его container
UIImageView:0x7fa9810375d0, назовите его image1
UIImageView:0x7fa981037490, назовите его image2.

Не проверять ограничения

Контейнер height равен 50, заданному авторезистированием. Высота, вероятно, не указана в представлении коллекции. Скорее всего, это размер ячейки, когда он создается, прежде чем он будет изменен до размера, указанного в макете просмотра коллекции.

image2 является 71 точками под верхним маркером контейнера, поэтому по нижнему краю контейнера находится не менее 21.

image1 дно выровнено с нижней частью контейнера, поэтому оно находится над нижним краем контейнера.

Теперь ваши последние узлы ограничения image1 и image2 по вертикали, так что, очевидно, есть столкновение.

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

Чтобы увидеть ошибки в Interface Builder, измените высоту ячейки на 50, вы увидите, что все разбито. Есть только некоторые ненужные ограничения, которые вызывают конфликт при изменении размера.

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

Ответ 4

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

yourCustomCell.contentView.frame = yourCustomCell.bounds;  

Ответ 5

проверить изображение Image centerY constrain

введите описание изображения здесь

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

После удаления centreY сжимайте, если есть неоднозначность, тогда xcode снова покажет вам ту же ошибку, снова вам нужно удалить неоднозначный ограничитель.

Ответ 6

Ну, предупреждающее сообщение дает понять, что не так.

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7fa98103b8d0 UIImageView:0x7fa9810375d0.centerY == UIImageView:0x7fa981037490.centerY>

Итак, для анализа у вас есть два объекта, основанных на представлении. Один из них настроен на самоцентрирование сверху вниз на другой вид (0x7fa9810375d0 - 0x7fa981037490 - это идентификаторы видов)

Но также вид id 0x7fa981037490 имеет другое ограничение,

<NSLayoutConstraint:0x7fa98103ba60 UIImageView:0x7fa981037490.top == UIView:0x7fa9810371d0.topMargin + 71>

Как выглядит верхняя часть 0x7fa981037490 выравнивается в верхней части окна 0x7fa9810371d0 плюс 71 пункт.

Я не скачал ваш проект, но я бы поспорил, что там проблема. Наилучшая догадка заключается в том, что ограничения centre.y не могут быть удовлетворены, потому что выравнивающая вершина перемещает ImageView в место, которое его разрывает. Попытайтесь взглянуть на то, что вы установили в ограничениях визуально в своей голове. Вы привязаны к ImageViews и выровняли один из них до края другого представления. Как это сломается? (это то, о чем вы должны спрашивать себя)

Попробуйте удалить ограничение по одному и создать и запустить. Если предупреждение идет, то тот, который нуждается в исправлении. Да, представление может выглядеть странно, и вы можете использовать Command + Z, чтобы отменить удаление ограничений один за другим.

Отправляйся. Дайте мне знать