2013-07-24 71 views
0

我想達到的目標:的Xcode自動佈局:不能調整窗口

Custom View 1 
    aligned at the top 
    fixed height = 20px 
    width = window width 

Horizontal Split View 
    just below the custom view 
    width = window width 
    height = as large as possible 

Custom View 2 
    aligned at the bottom 
    fixed height = 20px 
    width = window width 

這是一個非常簡單的佈局:一個標題,並在窗口的頂部和底部的頁腳,在拆分視圖之間的一些內容應左右調整窗口大小。但是,蘋果公司很自動地設計了自動佈局管理器,我似乎無法得到這個工作。 (我已經摸索了大約三個小時吧!)

問題是:只要我給定製視圖一個固定的高度,窗口高度被鎖定,我不能再垂直調整它。我試圖做以下約束:

Custom View 1 
    Constraints 
    height = 20px 

Custom View 2 
    height = 20px 

Constraints 
    Leading horiz space from Custom View 1 to Superview = 0 
    Leading horiz space from Custom View 2 to Superview = 0 
    Leading horiz space from Split View to Superview = 0 
    Trailing horiz space from Custom View 1 to Superview = 0 
    Trailing horiz space from Custom View 2 to Superview = 0 
    Trailing horiz space from Split View to Superview = 0 

    Top vert space between Custom View 1 and Superview = 0 
    Vert space between Custom View 1 and Split View = 0 
    Vert space between Custom View 2 and Split View = 0 
    Bottom vert space between Custom View 2 and Superview = 0 
    Top vert space between Custom View 2 and Superview = 344px (!) 

最後一行是由Xcode添加,我無法刪除它。當然,這是負責固定的垂直佈局。我怎樣才能擺脫它?

回答

2

好吧,我終於明白了。

我不得不離開IB的冗餘約束,但給它一個優先級1.IB優先給它1000,總是凌駕於我的約束之上。

+0

另一個解決方案是在XCode中添加約束,但是選中「placeholder」這個框 - 這會在運行時刪除它,所以你的xib看起來不錯,但是約束不會在你的應用中修復。 – Jesse

0

每個視圖都需要有足夠的約束來讓佈局系統計算位置(x和y)和大小(寬度和高度)。如果系統沒有足夠的信息來計算這些屬性,則佈局被認爲是不明確。 Xcode中的Interface Builder不會讓你創建一個模糊的佈局,所以它會添加約束來確保完全受限的佈局。

根據您的信息,似乎subview2已被充分約束。不過,我想也許你沒有將視圖的高度設置爲約束條件。您爲視圖設置的框架被佈局系統忽略。這會引起歧義。 嘗試將高度約束添加到子視圖2。

+0

好吧,我在拆分視圖中添加了一個約束,要求高度大於等於100.我可以刪除自定義視圖2和超級視圖之間的冗餘約束。但是,IB自動向自定義視圖1(空間超級視圖底部= 344)添加了一個新約束,我無法刪除該約束。窗戶的高度仍然是固定的。 –

+0

不等式約束(> = 100)本身幾乎不會考慮歧義問題。 Splitview的頂部和底部邊緣是否固定在子視圖1和2上? – Maarten

+0

另外,你有subview1和subview2高**限制**嗎?在尺寸檢查器中設置其框架可能不夠。確保你已經添加了一個限制20點高度的限制。 – Maarten