После обновления до Xcode 6.1 beta 2, когда я запускаю свое приложение, содержащее ячейки tableview, помощник по отладке говорит:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Раньше, когда я использовал Xcode 5 в этом проекте, я получал несколько ошибок, но они исчезли после обновления. У меня сейчас нет других ошибок или предупреждений. Я уже пробовал настраивать размеры всех ячеек tableview, а также пытался использовать стандартную высоту, но все равно получаю то же предупреждение:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Я также прочитал все похожие темы по этому поводу, но ни одно из их решений не помогает. Когда я тестирую приложение с помощью симулятора, оно работает нормально, за исключением того, что изображений, которые должны быть в ячейках tableView, нет.
ios
objective-c
swift
xcode
uitableview
Дэвид Э
источник
источник
Ответы:
Пока это предупреждение заглушили три вещи. Вы можете подобрать наиболее удобный для вас. Но ничего красивого.
Чтобы установить высоту ячейки по умолчанию в viewDidLoad
Перейдите в раскадровку и измените высоту строки в табличном представлении на значение, отличное от 44.
Для реализации метода делегата tableview heightForRowAtIndexPath
Weird.
источник
self.tableView.rowHeight = 44;
не тот. Ошибка ушла! спасибоВы сталкиваетесь с побочным эффектом новой фантастической функции в iOS8 Tableviews: Automatic Row Heights.
В iOS 7 у вас либо были строки фиксированного размера (заданные с помощью
tableView.rowHeight
), либо вы написали код для вычисления высоты ваших ячеек и вернули бы его вtableView:heightForRowAtIndexPath
. Написание кода для вычисления высоты ячейки могло бы быть довольно сложным, если бы у вас было множество представлений в вашей ячейке и у вас были разные высоты, которые нужно учитывать при разных размерах шрифта. Добавьте динамический тип, и процесс оказался занозой в заднице.В iOS 8 вы по-прежнему можете делать то же самое, но теперь iOS может определять высоту строк при условии, что вы настроили содержимое ячейки с помощью Auto Layout. Это огромное преимущество для разработчиков, поскольку при изменении размера динамического шрифта или изменении размера текста пользователем с помощью настроек специальных возможностей пользовательский интерфейс может адаптироваться к новому размеру. Это также означает, что если у вас есть UILabel, который может иметь несколько строк текста, ваша ячейка теперь может увеличиваться, чтобы вместить их, когда это необходимо ячейкам, и сжиматься, когда это не так, поэтому нет ненужных пробелов.
Предупреждающее сообщение, которое вы видите, сообщает вам, что в вашей ячейке недостаточно ограничений для автоматического макета, чтобы сообщить табличному представлению о высоте ячейки.
Чтобы использовать динамическую высоту ячейки, которая, наряду с методами, уже упомянутыми в других плакатах, также избавит от этого сообщения, вам необходимо убедиться, что ваша ячейка имеет достаточные ограничения для привязки элементов пользовательского интерфейса к верхней и нижней части ячейки. Если вы раньше использовали Auto Layout, вы, вероятно, привыкли устанавливать ограничения Top + Leading, но для динамической высоты строки также требуются ограничения снизу.
Этап макета работает так, что происходит непосредственно перед отображением ячейки на экране точно в срок:
Рассчитываются размеры содержимого с внутренними размерами. Это включает UILabels и UIImageViews, где их размеры основаны на тексте или UIImages, которые они содержат, соответственно. Оба этих представления будут считать свою ширину известной (потому что вы установили ограничения для задних / передних кромок, или вы установили явную ширину, или вы использовали горизонтальные ограничения, которые в конечном итоге показывают ширину из стороны в сторону). Допустим, у метки есть абзац текста («количество строк» установлено на 0, поэтому он будет автоматически переноситься), он может быть только 310 точек в поперечнике, поэтому он определен как высотой 120 пунктов при текущем размере шрифта.
Пользовательский интерфейс размещен в соответствии с вашими ограничениями позиционирования. В нижней части метки есть ограничение, которое соединяется с нижним полем ячейки. Поскольку метка выросла до 120 точек в высоту, и поскольку она привязана к нижней части ячейки ограничением, она должна подтолкнуть ячейку «вниз» (увеличивая высоту ячейки), чтобы удовлетворить ограничение, которое гласит «нижняя часть метка всегда находится на стандартном расстоянии от низа ячейки.
Сообщение об ошибке, о котором вы сообщили, возникает, если это нижнее ограничение отсутствует, и в этом случае нет ничего, что могло бы "отодвинуть" нижнюю часть ячейки от верхней части ячейки, что является сообщением двусмысленности: нечего толкать нижнюю часть из вверху ячейка разрушается. Но Auto Layout тоже обнаруживает это и возвращается к использованию стандартной высоты строки.
Что бы это ни стоило, и в основном для получения округленного ответа, если вы действительно реализуете динамическую высоту строк на основе автоматического макета iOS 8, вам следует реализовать
tableView:estimatedHeightForRowAtIndexPath:
. Этот метод оценки может использовать приблизительные значения для ваших ячеек, и он будет вызываться при первоначальной загрузке табличного представления. Это помогает UIKit рисовать такие вещи, как полоса прокрутки, которую нельзя нарисовать, если табличное представление не знает, сколько контента оно может прокручивать, но не требует абсолютно точных размеров, поскольку это просто полоса прокрутки. Это позволяет отложить вычисление фактической высоты строки до момента, когда ячейка понадобится, что требует меньших вычислительных затрат и позволяет быстрее представить ваш UITableView.источник
У меня возникла эта проблема после создания настраиваемого
UITableViewCell
и добавления моих вложенных представлений в ячейку вместо ееcontentView
.источник
Чтобы решить эту проблему без программного метода, настройте высоту строки представления таблицы в инспекторе размеров из раскадровки.
источник
Это проблема автоматического раскладки. Убедитесь, что ваши subviews имеют все ограничения. Для меня нижнее ограничение отсутствовало для заголовка в ячейке. Когда я добавил это, предупреждение исчезло, и все появилось отлично.
источник
Просто включите саморазмерные ячейки представления таблицы
и убедитесь, что вы добавили ограничения со всех сторон
UITableViewCell
ас-Пример ссылки 1
Пример ссылки 2
источник
UITableViewAutomaticDimension
был переименован вUITableView.automaticDimension
Если вы используете статическую или динамическую ячейку, просто добавьте высоту строки в представление таблицы в таблице инспектора и снимите флажок автоматически справа от высоты строки, и вы перестанете получать это предупреждение.
источник
Я получил это предупреждение сегодня. Вот что заставило его исчезнуть для меня (в конструкторе интерфейсов)
1. Установите для поля высоты строки для представления таблицы значение, отличное от 44 2 Установите для поля высоты строки для ячейки tableView значение, отличное от 44
Мне не пришлось вносить никаких изменений в код
источник
В моем случае я создавал ячейку программно и продолжал получать эту ошибку.
Я добавление подвидов и ограничений в
UITableViewCell
«Sinit
метод , как это:Я решил проблему, добавив их в ячейку
contentView
:источник
contentView
, а неUITableViewCell
напрямую.Установите расчетную высоту строки на ноль, и предупреждение исчезнет:
источник
Я тоже испытал это предупреждение при переходе на Xcode 6 GM. Я получил предупреждение только тогда, когда повернул устройство в исходное положение.
Я использую пользовательские UITableViewCells. Для представления таблицы раскадровки задан мой нестандартный размер (в моем случае 100,0). Хотя ячейки таблицы отображаются правильно, как и в предыдущих выпусках, мне не понравилось предупреждающее сообщение.
В дополнение к приведенным выше идеям я добавил это
Экран отображает ... реагирует на вращение и больше никаких предупреждающих сообщений.
источник
В xcode 6.0.1 я удалил это предупреждение, указав высоту строки, используя:
источник
Если вы создали Custom tableViewCell для tableView, убедитесь, что вы указали как нижние, так и верхние ограничения для своих ячеек, вы также можете получить это сообщение, если ваши подпредставления внутри пользовательских ячеек выровнены по центру Y, что не вызовет никаких сообщений об ошибках, но приведет к беспорядку вверх с определением высоты строки для tableview по очереди, как на изображении, которое я прикрепил, здесь у нас есть как верхние, так и нижние ограничения
Когда вы создаете пользовательскую ячейку для tableView, вы должны указать высоту строки или верхние и нижние ограничения для пользовательских подпредставлений ячейки внутри ячейки (например, метка в пользовательской ячейке, как на изображении ниже)
Но если это не сработает, вы можете попробовать установить высоту строки для своей ячейки вместо автоматической, как на этом изображении.
Но убедитесь, что если вы отключите эту автоматическую галочку, вам придется программно настроить размер строки для изменений, которые могли быть сделаны автоматически.
источник
В раскадровке установите
cell
Row height
поле с тем же значением, что иRow height
вtableView
(у меня оба с одинаковым значением работали).Если вы добавите
heightForRowAtIndexPath
функцию в свой код, это может вызвать проблемы с производительностью, потому что она будет вызываться для каждой ячейки, поэтому будьте осторожны.источник
Вы также можете увидеть это сообщение, если ваши единственные ограничения настроены на выравнивание всех элементов по вертикали и вы не указали / не хотите, чтобы высота для ячейки была указана. Если вы установите для элемента ограничение сверху / снизу, предупреждение исчезнет.
источник
У меня была эта проблема, когда мои метки и представления в настраиваемом tableViewCell были ограничены customCell, а не его Content View. Когда я снял ограничения и подключил их к ячейкам Content View, проблема была решена.
источник
У меня было такое же сообщение об ошибке, убедитесь, что все ваши выходы действительны, например, табличное представление и ограничения табличного представления
источник
Если вы производите динамический расчет высоты,
источник
У меня также есть аналогичная проблема для пользовательской ячейки tableview, которая имеет динамическую высоту строки. Динамическая высота не отражалась, и в консоли появилось такое же предупреждение. Решение заключается в добавлении подпредставлений в ячейку вместо contentView. Кстати, я создал подпредставления программно.
источник
У меня есть эта проблема с
TableViewCell
s, где ограничения устанавливаются при инициализации, но где содержимое ячейки загружается впоследствии, это означает, что механизм автоматического размещения не может определить высоту. Другие решения здесь не работают, потому что мне нужна высота ячейкиUITableView.automaticDimension
.Я просто добавил в ячейку дополнительное ограничение:
источник
Я получил это предупреждение сегодня Все, что я сделал, это просто добавил одну дополнительную строку в свой код
добавьте эту строку кода внутри
и окончательный код выглядит как
этот код увеличит высоту ячейки строки таблицы до 200, высота по умолчанию - 44
источник
У меня такая же ошибка, из-за этой строки была показана эта ошибка.
self.layer.backgroundColor = UIColor (white: 1, alpha: 0.2) as! CGColor
Я просто меняю строку, как показано ниже, чтобы исправить ошибку
self.layer.backgroundColor = UIColor (белый: 1, альфа: 0,2) .cgColor
источник