2009-11-01 3 views
4

У меня есть вид (UIScrollView), который загружает некоторые данные и отображает из него различные вещи в разных областях. Таким образом, у меня есть приблизительно 10 subviews (UIImageView, UILabel), и мне нужно поместить их программно, учитывая их непредсказуемое содержимое (то есть различную высоту/ширину для UILabel s в зависимости от свойства text).Cocoa-Touch: Как сделать макет

Из того, что я читал, нет рамки компоновки для Cocoa-touch.

Каков наилучший способ для этого?

Из того, что я могу сказать, я должен поместить содержимое в представления, а затем начать вычислять координаты на основе их кадров после вызова их методов sizeToFit.

Этот подход очень подвержен ошибкам. Разве нет другого пути?

ответ

6

Вы правы, автоматических менеджеров макетов нет. Подклассификация UIScrollView и переопределение layoutSubviews, вероятно, является правильным способом реализации вашего пользовательского алгоритма. Затем вы можете позвонить setNeedsLayout, чтобы сделать макет.

-1

Вы можете использовать Interface Builder, чтобы создать представление, а затем перетащить в него элементы.

+1

попробуйте прочитать вопрос перед ответом, ДА, IB работает, когда у меня есть статический контент. Вопрос в том, что лучший способ сделать это, когда контент динамический. – Prody

1

Я не знаю никаких автоматических менеджеров макетов или тому подобного.

Итак, я думаю, вам нужно будет рассчитать желаемые позиции и размеры и обновить frame s ваших подзонов вручную.

EDIT: Я нашел this question, где Брэд Ларсон указывает на пример менеджера компоновки. HTH

3

Макет в какао обычно выполняется с автоматическим изменением размера (с использованием autoresizingMask). Вы начинаете с вашего взгляда на некоторые жестко запрограммированные начальные размеры, скажем, 200x200; поместите свои подзоны на это представление и соответствующим образом установите флаги авторазмера. Это представление затем может быть изменено до его фактического размера, как определено его родительским представлением/окном. Процесс тот же, независимо от того, используете ли вы Interface Builder или программно ли вы это делаете.

Если вам нужен вертикальный стек представлений, вы можете использовать табличный вид.

Если вам нужен более сложный макет, вам необходимо его реализовать самостоятельно, переопределив layoutSubviews.

Смежные вопросы