2013-08-24 34 views
1

在IOS 6 iPad應用程序中,我有一個具有多個容器視圖的容器視圖控制器。目前,我已將自己的應用鎖定到風景並正常工作,但我也想支持人像。一切都是通過使用自動佈局和通過界面構建​​器的約束來設置的。如果可能,我想保持一個故事板的一致性,可維護性等。Xcode IB Storyboards方向和容器視圖

佈局是這樣的:標題,左側菜單,兩個內容窗格(橫向並排)和一個窗格,我全部調整窗格大小除了內容。當從橫向旋轉到縱向時,我希望一個內容窗格滑動到另一個的下面(目前它從屏幕上吹掉),並且都要粘到容器視圖的邊緣。

在HTML5/CSS3中,這很容易做,但我堅持在IB中,任何幫助/想法都會很棒!

謝謝!

編輯:

解決方案 -

繼@Charles A.的建議下,我聯繫了NSLayoutConstraints到IBOutlets和操縱間距/優先級代碼。我真正掙扎的地方是使用高度和寬度約束。如果你移動了任何東西,界面生成器會刪除或覆蓋頂部/底部約束的前導/尾隨&。我終於讓步了,並且擺脫了所有身高限制,並且只使用了前導/尾隨/頂部/底部。

2的事情,我想通了:約束具有里程碑(一個以優先級#750爲例),所以如果你務實更改優先級,從749到750,你會得到:

Mutating a priority from required to not on an installed constraint (or vice-versa) is not supported. 

但如果你從750變成了800,你很好。

此外,操縱約束條件之後,我需要打電話:

[self updateViewConstraints] 

我找到了一個職位,建議[父updateViewConstraints],沒有工作,在一個沒有以上!

無論如何,我希望這可以幫助其他人在這個地方,因爲那裏沒有太多。

回答

1

如果不知道如何設置佈局約束來處理兩個內容視圖,就很難回答問題。話雖如此,我可能會通過讓我的佈局約束類似於這個(我將使用可視化格式來描述,我假設superview是這種情況下的兩個內容視圖的父級)來討論這個UI:

|-[contentViewOne]-0-[contentViewTwo(==contentViewOne)]-| 

如果約束設置如上述在故事板中,可以創建一個IBOutletNSLayoutConstraint*類型,並且將其連接到兩個內容視圖之間的水平空間約束(指定爲0的恆定值的一個,在我上面的情況)。當您從風景變爲動畫時,只需將其設置爲contentViewOne的負值即可。這應該有所需的影響。當從縱向旋轉到橫向時,您顯然也必須將其設置回0。

值得注意的是,我假設你的內容視圖是相等的寬度。如果他們不是,你可能還需要爲滑動的寬度限制做一個寬度限制,以便暫時將其設置爲與覆蓋它的寬度限制相同的寬度。

有很多潛在的方法可以使用自動佈局來解決此佈局。我上面描述的只是一個這樣的方式。這取決於你已有的佈局有什麼意義。