Я пытаюсь программно создать представление контейнера с двумя подпредставлениями UILabel, которые ведут себя следующим образом:
- Ширина контейнера привязана к его супервизору; его высота ограничена, чтобы соответствовать этикеткам
- Этикетки располагаются горизонтально со стандартным интервалом между ними (8 точек).
- Ширина левой этикетки составляет 25% от ширины контейнера.
- Правильная ширина этикетки заполняет доступное пространство за вычетом стандартного горизонтального интервала.
- Длинный текст следует разрывать по границам слова, перемещаться по нескольким строкам; обе метки должны расти вертикально, чтобы вместить длинный текст
Я определил ярлыки с помощью numberOfLines = 0
и lineBreakMode = NSLineBreakByWordWrapping
.
Обратите внимание, что размер контейнера полностью динамический; его ширина определяется его супервизором, а его высота определяется его подпредставлениями (метками). Размер меток также является динамическим; их ширина пропорциональна ширине контейнера, а их высота зависит от длины текста.
Мне удалось добиться всего, что указано выше, за исключением последнего элемента, со следующими ограничениями (псевдокод). A - левая метка, B - правая.
- A.top == container.top
- B.top == container.top
- A.leading = container.leading
- A.trailing == B.leading - 8
- B.trailing == container.trailing
- A == 0,25 * ширина контейнера
- container.height> = A.height
- container.height> = B.height
Последние 2 ограничения предназначены для того, чтобы растянуть контейнер, чтобы он соответствовал более высокой из этикеток, но механизм компоновки, похоже, игнорирует тот факт, что этикетки могут быть многострочными. То есть я всегда получаю одну строку, независимо от длины текста.
Итак, какие ограничения мне нужно добавить / изменить / удалить, чтобы достичь полного набора поведений, описанных выше?