我有一個UIViewController
包含一對夫婦UIView
S和A UILabel
,它的呈現全屏幕,嵌入UINavigationController
。在一個非緊湊的高度環境(肖像)中,我希望盒子可以堆疊在一起,下面有標籤 - 這是按預期工作的。現在,當旋轉到一個緊湊的高度環境(風景)時,課程的視圖會重新定位,因此現在盒子的寬度會增加,高度會減少。我不想要那種行爲。相反,我希望始終將盒子放在縱向位置,但標籤應該像導航欄一樣旋轉,以便在當前方向上保持可讀。 (這意味着意見的高度將是在這種情況下,更多的收縮了一下,由於導航欄。)防止旋轉的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