2015-03-12 5 views
0

У меня возникли проблемы с настраиваемым TableViewCell Autolayout в iOS 7. Ячейка отображается правильно, но я получаю очень много отладочного вывода консоли, например:Проблемы с автоопределением в iOS 7 в Custom TableViewCell

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:0x7f9c1a4b8500 V:[UILabel:0x7f9c1a4b72d0]-(0)-[UILabel:0x7f9c1a4b7680]>", 
"<NSLayoutConstraint:0x7f9c1a4b8550 V:[UILabel:0x7f9c1a4b7680]-(0)-[UILabel:0x7f9c1a488910]>", 
"<NSLayoutConstraint:0x7f9c1a4b85c0 V:[UILabel:0x7f9c1a488910]-(NSSpace(20))-| (Names: '|':UITableViewCellContentView:0x7f9c1a4b66d0)>", 
"<NSLayoutConstraint:0x7f9c1a4b87f0 V:|-(NSSpace(20))-[UILabel:0x7f9c1a4b6f00] (Names: '|':UITableViewCellContentView:0x7f9c1a4b66d0)>", 
"<NSLayoutConstraint:0x7f9c1a4b8840 V:[UILabel:0x7f9c1a4b6f00]-(NSSpace(8))-[UILabel:0x7f9c1a4b72d0]>", 
"<NSAutoresizingMaskLayoutConstraint:0x7f9c1a4a70e0 h=--& v=--& V:[UITableViewCellContentView:0x7f9c1a4b66d0(44)]>" 
) 

Я получаю этот вывод только в iOS 7, и я вижу его на всех моих пользовательских ячейках просмотра таблицы, через несколько контроллеров представлений. Я следил за всеми шагами в этом посте: (Using Auto Layout in UITableView for dynamic cell layouts & variable row heights). Я попытался настроить AutoresizingMask представления содержимого в этих ячейках, но это не мешает появлению этих ошибок. Я был бы очень признателен за некоторые советы по исправлению этих ошибок. Благодаря!

+0

В iOS7 есть что-то действительно напуганное с автоматическим расположением в «UITableViewCell». Я спросил об этом здесь: http://stackoverflow.com/questions/28696264/ambiguous-layout-warnings-for-uilabels-in-uitableviewcell, но пока не нашел решения. – Koen

+0

Да, я проверял каждое сообщение, которое я могу найти об этом, я думаю, что наткнулся на ваш пост раньше. Если это просто ошибка с iOS 7, будет ли консольный вывод повлиять на утверждение магазина приложений? Очевидно, что он менее идеален, но пользовательский интерфейс выглядит и прекрасно себя ведет. –

+0

FYI, я наконец выяснил, в чем была моя проблема, мне пришлось добавить 'setContentHuggingPriority' с приоритетом' UILayoutPriorityFittingSizeLevel' для горизонтальной оси. – Koen

ответ

1

Последний, "NSAutoresizingMaskLayoutConstraint: 0x7f9c1a4a70e0 ч = - = & v - & V: [UITableViewCellContentView: 0x7f9c1a4b66d0 (44)]"

может свидетельствовать о том, что в tableviewcell свойство translatesAutoresizingMaskIntoConstraints установлено значение ДА. Если это так, попробуйте установить NO, чтобы избежать конфликтов между вашими ограничениями и автоматическими.

+0

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

+0

Я смог исправить эту проблему, ограничив ширину представления содержимого ячеек на ширину ячейки. Это работает для ios7, но разбивает макеты в ios8 –

0

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

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

Или 2) дублирующиеся ограничения, сформулированные по-разному (в центре по вертикали, но также и в трейлинг-пространстве и т. Д.), Мне сложнее дистанционно диагностировать, поэтому публикация ограничения будет важна.

Если конкретные ограничения не так важны для вас (AKA, вы так долго не добавляли их), а затем удаляли их все, добавляя предложения, а работа с ними была очень хорошей отправной точкой.

+0

Если ограничения были противоречивыми, не могли бы я также получать ошибки в iOS8? Кроме того, макет выглядит полностью корректным, насколько я могу судить, я не вижу никаких элементов пользовательского интерфейса из положения или пропущен, как обычно, с конфликтами. –

+0

Зависит от устройства, так как он может конфликтовать только с определенными разрешениями (AKA вы пытались использовать одно и то же устройство/разрешение для обеих версий ОС.) Кроме того, в зависимости от того, какие ограничения были нарушены, много раз пользовательский интерфейс выглядит прилично, потому что они игнорируются ограничения, которые наименее полезны. Например, Center Vertically, но Trailing space, если центр по вертикали соблюден, вы, вероятно, не заметите, потому что он будет центрирован. – Tim

+0

Да, если он запускает код на симуляторе iPhone 4S с запуском 8.2, у меня проблем нет, но если я запустил его на симуляторе iPhone 4s с 7.1, я его получу. То же самое касается 5-х. Я дважды проверю, чтобы убедиться, что конфликтов нет. Большая часть вывода консоли имеет смысл для меня, за исключением этого "[UITableViewCellContentView: 0x7f9c1a4b66d0 (44).«Из моего понимания это означает, что ContentView ячейки пытается быть вертикально поставлен на высоту 44, но я использую правильный код heightForTableViewCell по ссылке. Обычно я не вижу этого во время конфликтов. –

Смежные вопросы