Разметка и калибровка подпредставлений в UIViewController

У меня есть приложение с с a UITabController и каждая вкладка является a UINavigationController. Корень одного из моего UINavigationControllers a UIViewController.

В том представлении контроллера представления я хочу к расположению некоторые подпредставления, но я смущен как, туда, где и как разметить их способом, которые будут независимым разрешением (т.е. не hardcode значения, такие как 320 пкс, 480 пкс, 44 пкс, и т.д.).

То, когда представление полностью загружено и представлено на вертикальном iPhone, это - высота, составит 367 пкс = 480 - 20 (строка состояния) - 44 (военно-морская панель) - 49 (панель вкладок).

В контроллере представления я в настоящее время создаю все свои подпредставления в viewDidLoad метод. Однако кажется, что в рамках этого метода, текущая высота представления составляет 460 пкс (self.view.bounds.size.height). Таким образом, при установке моих подпредставлений, я не могу правильно вычислить размеры ничего.

В viewWillAppear: метод, представление действительно знает, что это - надлежащий размер, но это означало бы устанавливать и вычислять кадры подпредставления каждый раз, когда представление появится (например, изменения вкладки или появляющийся от дочерних контроллеров представления на стопке навигации.

Единственный путь состоит в том, чтобы сделать это правильно к расположению в viewWillAppear:?

Я попытался использовать свойства автоизменения размеров (родитель autoresizesSubviews & autoresizingMask) но они, кажется, не работают вообще!? Они только вступают в силу, после того как представление является всей установкой, и затем это изменено (вручную / изменение ориентации?).

Я был бы благодарен, если кто-то мог бы сообщить мне, почему автоизменение размеров не работает, и как лучше всего разметить вещи не жесткое кодирование любые размеры.

50
задан Peter Hosey 17 January 2010 в 22:30
поделиться

1 ответ

AutoSitizessubviews должны быть установлены на вашем родительском представлении, а AutoSeasingMask должен быть установлен на дочерние представления - это ошибка, которую я сделал, чтобы вы могли , тоже.

В LoadView Вы должны разместить ваши субпроизводители, чтобы соответствовать, какой размер родительского вида находится в данный момент, а затем позже, когда родительский вид изменяется с изменением от 460 до 367 пикселей, ваши подсветки будут изменяться как Ну, в соответствии с настройками вашей маски выше.

Если это произойдет, нет ничего плохого в установлении размера вида в ViewWillAppear - Воздействие производительности его каждый раз незначительно.

Если ничего не работает, всегда есть LayoutSubViews: - Там вы можете сделать ручную макет, если вам нужно, он вызывает, когда система считает, что макет может быть изменен. Также есть SETNEEDSLAYOUT : что я иногда вызываю из ViewWillrotate: / ViewDIDRotate : и т. Д. Но на самом деле это не должно быть необходимости, и ауторезионизировать должно быть достаточно хорошо.

Редактировать: Да, для реализации пользовательской логики макета в LayoutsubViews Как я упоминаю выше, нужно будет подкласс UIVIEW .

35
ответ дан 7 November 2019 в 11:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: