2013-05-28 66 views
0

我試圖完成的事情看起來非常直截了當,但我已經在這一整天了,我無法弄清楚。使用XIBs和自動佈局來操作視圖層次結構

我有一個故事板(它還沒有使用自動佈局)和一個帶有分頁滾動視圖的場景。我也有2個XIB,我在代碼中實例化。第一個XIB(A)有一個UILabel和一個通用的UIView。第二個XIB(B)只有+ UIButton。最終目標是將B加載到A中的通用視圖中(水平居中和標籤下的「默認值」),並使A在滾動視圖中佔據整個頁面。

當我調整XIB A的視圖時,通用視圖的大小會擴大和縮小,但始終保持標籤下方的默認值。當我調整XIB B的視圖時,按鈕排列保持居中(這是我想要的)。這是我想要的行爲。

用下面的代碼,但是,它不工作:

View A *viewA = [[ViewA alloc] initWithFrame:CGRectZero]; 
viewA.textLabel.text = @"A label with a rather long text"; 

ViewB *viewB = [[ViewB alloc] initWithFrame:CGRectZero]; 

[viewA setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[viewB setTranslatesAutoresizingMaskIntoConstraints:NO]; 

[viewA.customView addSubview:viewB]; // customView is the generic view 

這使我有以下幾點:

enter image description here

(白色區域爲滾動視圖,紅色區域視圖A,綠色區域視圖B.)

我試着添加一個約束條件,讓視圖B佔據其超級視圖的整個寬度:

[viewA.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[viewB]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(viewB)]]; 

但導致這個:

enter image description here

我能做些什麼,以獲得在綠色區域中心的按鈕?我不在乎綠色區域是否完全被紅色區域覆蓋,或紅色區域是否正好位於綠色區域的中央。

回答

0

你提到在xib中沒有使用自動佈局,所以我會假設在代碼中添加約束沒有影響。您應該嘗試使用適當的AutoresizingMasks來添加代碼中的視圖。嘗試在xibs中使用自動佈局(正確),除非有充分的理由不這樣做。

面具的一個例子如下,你需要找出你需要哪一個,不能真正告訴你的例子。

yourView.translatesAutoresizingMaskIntoConstraints = NO; 
[yourView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight]; 
+0

在XIB中啓用了自動佈局,但故事板仍然適用於支柱和彈簧。 –

+0

您是否檢查過您的綠色視圖的框架尺寸是否合適,它看起來像是超出了可見區域,並且按鈕可能位於中心位置 – ceekay