Ограничения для автоматического размещения в nib не учитываются для UITableViewHeaderFooterView

У меня есть UITableView с несколькими столбцами данных. Повторно используемые ячейки загружаются из xib-файла, который имеет соответствующие метки и ограничения для автоматического размещения. Все работает отлично; столбцы таблицы правильно расположены на разных устройствах и при их повороте.

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

Я создал xib-файл с теми же ограничениями автопоставки, что и в xib-файле ячейки, и загружаю его в tableView.viewForFooterInSection так же, как я сделал для клеток. Как требуется, я использую подкласс UITableViewHeaderFooterView вместо UITableViewCell,

awakeFromNib метод в UITableViewHeaderFooterView Подкласс устанавливает цвет фона, так что я вижу, что это правильный размер для всех устройств / ориентации, но метки из xib-файла нижнего колонтитула не размещаются так, чтобы соответствовать ячейкам таблицы.

Ограничения автоматического размещения из xib-файла нижнего колонтитула не соблюдаются. Когда я устанавливаю другой цвет фона в xib-файле нижнего колонтитула, нижний колонтитул таблицы показывает этот цвет фона для длины представления xib.

Я новичок во всей этой технологии и был бы очень признателен за помощь в решении этой невероятно неприятной проблемы.

Есть ли способ использовать autolayout для UITableViewHeaderFooterViews загружен из перьев?

1 ответ

Вам следует позвонить setNeedsUpdateConstraints() обновить ваше мнение.

Из яблочной документации

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

Также вы можете обновить вид броска layoutSubviews()

Выкладывает подпредставления. Реализация этого метода по умолчанию ничего не делает на iOS 5.1 и более ранних версиях. В противном случае реализация по умолчанию использует любые ограничения, которые вы установили, чтобы определить размер и положение любых подпредставлений. Подклассы могут переопределять этот метод по мере необходимости, чтобы выполнить более точную компоновку своих подпредставлений. Вы должны переопределить этот метод только в том случае, если авторазмер и основанные на ограничениях поведения подпредставлений не предлагают нужного вам поведения. Вы можете использовать свою реализацию для прямой установки прямоугольников фреймов ваших подпредставлений. Вы не должны вызывать этот метод напрямую. Если вы хотите принудительно обновить макет, вместо этого вызовите метод setNeedsLayout, чтобы сделать это до следующего обновления чертежа. Если вы хотите немедленно обновить макет ваших представлений, вызовите метод layoutIfNeeded.

Другие вопросы по тегам