У меня есть UIViewController
, который содержит пару UIView
с, и UILabel
, и он представлен полным экраном, встроенный в UINavigationController
. В некомпактной среде с высотой (портрет) я хочу, чтобы ящики располагались друг над другом с ярлыком внизу - это работает как ожидалось. Теперь при повороте на компактную высоту (ландшафт) изображения, конечно, перемещаются, поэтому коробки теперь увеличиваются по ширине и уменьшаются по высоте. Я не хочу этого поведения. Вместо этого я хочу всегда позиционировать коробки, как если бы iPhone был на портрете, но метка должна вращаться, а также панель навигации, чтобы она оставалась читаемой в текущей ориентации. (Это означает, что высота взглядов будет немного более суженные в этом случае из-за навигационной панели.)Предотвращения вращающегося UIView подтаблицы, позволяют вращающейся родственный подвиды
Картина помогает объяснить намного лучше:
Таким образом, вопрос , как вы можете предотвратить вращение конкретных UIView
s, сохраняя при этом ориентацию ландшафта в UIViewController
?
Я видел другие подобные вопросы, но они используют устаревшие методы обнаружения вращения для определенной ориентации устройства, что не имеет отношения к iOS 8+. Этот вопрос заключается в том, как это сделать, если думать о размерах. Я считаю, что решение будет использовать viewWillTransitionToSize
и animateAlongsideTransition
, но то, что нужно сделать, мне не совсем понятно.
Я использую рамки в этом случае, а не макет. Все представления создаются программно. Ящики действительно представляют собой подкласс подкласса UIView
, который выдает и рисует содержимое в полях на основе кадра родительского представления.
В UIViewController
:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let topPosition = self.topLayoutGuide.length
boxesContainer.frame = CGRectMake(20, topPosition, self.view.frame.size.width - 40, (self.view.frame.size.height - topPosition)/1.5)
boxesContainer.updateLayout()
}
В коробке контейнера UIView
:
func updateLayout() {
box1.frame = // something based on self.frame
box2.frame = // ...
}
Вы создаете эти виды в раскадровке, xib или коде? –
Код @robmayoff – Joey