У меня есть подкласс UIView
, который содержит многострочный UILabel
. В этом представлении используется автозапуск.
Я хотел бы установить это представление как tableHeaderView
для UITableView
(а не для заголовка раздела). Высота этого заголовка будет зависеть от текста метки, которая, в свою очередь, зависит от ширины устройства. Тип автозапуска сценария должен быть отличным.
Я нашел и попытался много , чтобы получить эту работу, но безрезультатно. Некоторые из вещей, которые я пробовал:
- установка
preferredMaxLayoutWidth
на каждой метке во времяlayoutSubviews
- определение
intrinsicContentSize
- попытка определить требуемый размер для представления и установить кадр
tableHeaderView
вручную. - добавление ограничения ширины в представление, когда заголовок установлен
- куча других вещей
Некоторые из различных сбоев, с которыми я столкнулся:
- Метка
- выходит за пределы ширины представления, не обертывает
- высота кадра 0
- сбой приложений с исключением
Auto Layout still required after executing -layoutSubviews
Решение (или решения, если необходимо) должно работать как для iOS 7, так и для iOS 8. Обратите внимание, что все это делается программно. Я установил небольшой образец проекта, если вы хотите взломать его, чтобы увидеть проблему. У меня есть reset мои усилия по следующей начальной точке:
SCAMessageView *header = [[SCAMessageView alloc] init];
header.titleLabel.text = @"Warning";
header.subtitleLabel.text = @"This is a message with enough text to span multiple lines. This text is set at runtime and might be short or long.";
self.tableView.tableHeaderView = header;
Что мне не хватает?