У меня есть приложение с с 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
) но они, кажется, не работают вообще!? Они только вступают в силу, после того как представление является всей установкой, и затем это изменено (вручную / изменение ориентации?).
Я был бы благодарен, если кто-то мог бы сообщить мне, почему автоизменение размеров не работает, и как лучше всего разметить вещи не жесткое кодирование любые размеры.
AutoSitizessubviews
должны быть установлены на вашем родительском представлении, а AutoSeasingMask
должен быть установлен на дочерние представления - это ошибка, которую я сделал, чтобы вы могли , тоже.
В LoadView
Вы должны разместить ваши субпроизводители, чтобы соответствовать, какой размер родительского вида находится в данный момент, а затем позже, когда родительский вид изменяется с изменением от 460 до 367 пикселей, ваши подсветки будут изменяться как Ну, в соответствии с настройками вашей маски выше.
Если это произойдет, нет ничего плохого в установлении размера вида в ViewWillAppear
- Воздействие производительности его каждый раз незначительно.
Если ничего не работает, всегда есть LayoutSubViews:
- Там вы можете сделать ручную макет, если вам нужно, он вызывает, когда система считает, что макет может быть изменен. Также есть SETNEEDSLAYOUT
: что я иногда вызываю из ViewWillrotate:
/ ViewDIDRotate
: и т. Д. Но на самом деле это не должно быть необходимости, и ауторезионизировать должно быть достаточно хорошо.
Редактировать: Да, для реализации пользовательской логики макета в LayoutsubViews
Как я упоминаю выше, нужно будет подкласс UIVIEW
.