Определение проблемы
Я пытаюсь создать настраиваемый элемент управления, который будет вести себя аналогично UILabel
. Я должен иметь возможность размещать такой элемент управления внутри ячейки таблицы калибровки и должен:
- Оберните его контентом (например, UILabel с номеромOfLines = 0)
- автоматически расширяет размер ячейки размером с размеру
- обрабатывать поворот устройства.
- не требуют специального кода в UITableCellView или ViewControll для реализации этой функции (для UILabel не требуется никакого специального кода).
Исследование
Первое, что я сделал, очень просто. Я решил посмотреть, как работает UILabel. Я сделал следующее:
- создана таблица с ячейками для самостоятельного выбора.
- создал пользовательскую ячейку, поместил UILabel (с
numberOfLines=0)
в ней - созданы ограничения, чтобы убедиться, что UILabel занимает целую ячейку
- подклассы UILabel и переопределить множество методов, чтобы увидеть, как они себя ведут.
Я проверил следующие вещи
- Запустите его в портрете (метка отображается правильно на нескольких строках), и высота ячейки верна.
- Поверните его. Ширина и высота таблицы были обновлены, и они также верны.
Я заметил, что он ведет себя хорошо. Он не требует специального кода, и я видел порядок (некоторых) вызовов, которые система делает для его отображения.
Частичное решение
@Wingzero написал частичное решение ниже. Он создает ячейки правильного размера.
Однако его решение имеет две проблемы:
-
Он использует "self.superview.bounds.size.width". Это можно использовать, если ваш элемент управления занимает целую ячейку. Однако, если у вас есть что-то еще в ячейке, которая использует ограничения, то такой код не будет правильно вычислять ширину.
-
Он не обрабатывает вращение вообще. Я уверен, что он не обрабатывает другие события изменения размера (есть куча менее распространенных событий изменения размера - например, строка состояния становится больше по телефону и т.д.).
Вы знаете, как решить эти проблемы для этого случая? Я нашел кучу статей, в которых говорится о создании более статических пользовательских элементов управления и использовании предварительно встроенных элементов управления в ячейках для самостоятельной калибровки.
Однако я не нашел ничего, что составило бы решение для обработки этих двух.