Ответ 1
translatesAutoresizingMaskIntoConstraints
должен быть установлен в false, когда:
- Вы создаете объект
UIView
-based в коде (Storyboard/NIB установит его для вас, если для файла включена функция автоматического размещения), - И вы хотите использовать автоматическую компоновку для этого вида, а не рамку -based,
- И представление будет добавлено в иерархию представлений, которая использует автоматическое размещение.
В этом случае не все это правда. В частности, пункт 2.
После того, как вы возвращаете представление заголовка из viewForHeaderInSection
оно добавляется в табличное представление, и его frame
устанавливается на основе текущей ширины табличного представления и высоты, которую вы возвращаете из heightForHeaderInSection
.
Вы можете добавить подпредставления в представление корневого заголовка (header
в вашем коде) и использовать ограничения для размещения этих подпредставлений относительно представления заголовка.
Вы обнаружили причину, по которой вы не можете использовать autolayout для самого заголовка в ваших комментариях; в то время, когда вы создаете представление, оно еще не является частью иерархии представления, и поэтому вы не можете ограничить его края ничем.
Чтобы иметь динамический размер заголовка, вам нужно добавить подпредставления в ваше представление header
и добавить ограничения между этими подпредставлениями и header
. Затем автоматическое размещение может использовать собственный размер содержимого header
для определения размера представления header
.
Поскольку вы не ограничиваете рамку header
, не устанавливайте для translatesAutoresizingMaskIntoConstraints
значение false
. Вам нужно убедиться, что у вас есть достаточные ограничения на ваши подпредставления для автоматического размещения, чтобы определить размер header
.
Вам понадобится непрерывная линия ограничений сверху вниз и, возможно, некоторые ограничения высоты для ваших подпредставлений, если размер внутреннего содержимого этого подпредставления недостаточен.
Любые подпредставления, которые вы добавляете в header
действительно требуют для translatesAutoresizingMaskIntoConstraints
значения false
Вам также нужно вернуть что-то из estimatedHeightForHeaderInSection
- чем ближе к вашей фактической высоте заголовка, тем лучше - если вы используете tableview.sectionHeaderHeight = UITableViewAutomaticDimension