HTML-подобный макет в приложении для iPhone - PullRequest
1 голос
/ 14 февраля 2010

Как сделать независимый от разрешения контроллер представления iPhone, который может складывать свои подпредставления, как браузер укладывает элементы HTML?

Вот пример . Одна UILabel вверху, которая может содержать 1-6 строк текста; две кнопки UIB в ряд прямо под меткой; левая кнопка может иметь короткий или длинный заголовок. Я хочу, чтобы кнопки появлялись в правильном вертикальном положении, где заканчивается текст; Я хочу, чтобы левая кнопка масштабировалась в соответствии с длиной заголовка, а правая - для автоматического изменения положения.

Другими словами, я хочу наиболее естественное поведение для этого вида интерфейса при изменении его содержимого.

Есть ли способ сообщить Интерфейсному Разработчику или UIKit, чтобы он автоматически реализовывал такое поведение?

Ответы [ 2 ]

1 голос
/ 14 февраля 2010

Менеджеры макетов Cocoa недоступны на iPhone. Единственный автоматический инструмент макета - это свойство UIView autoresizingMask, которого недостаточно для решения вашей проблемы. Так что кодируй сам.

Правильное место для начала - переписать метод представления layoutSubviews. Он вызывается автоматически при изменении границ представления. Некоторые элементы управления также имеют приличное поведение автоматического изменения размера содержимого, вызывая их sizeToFit метод.

0 голосов
/ 14 марта 2013

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

По сути, существуют разные элементы управления контейнером, которые по-разному размещают элементы управления. Например, есть StackPanel, которая складывает элементы управления в соответствии с различными свойствами, которые вы можете установить. Есть также Grid, для которого вы хотите структурировать такие вещи, как таблица HTML. Они хорошо разработаны для компоновки, поэтому вы можете использовать контейнеры в различных комбинациях, чтобы получить довольно широкий диапазон макетов с небольшим количеством кода.

...