2013-08-06 85 views
1

我想要一個iPad佈局,並排放置兩個面板,以填充屏幕的寬度,兩者都與屏幕一樣高。我的嘗試導致如下如何解決模糊佈局?

self.view addConstraints: 
    @"|[_sidePanel(300)]-1.0-[_mainPanel]|" 
    @"V:|[_sidePanel]|" 
    @"V:|[_mainPanel]|" 

__sidePanel_裏面我試圖創建更多的子視圖的約束。

注意_sidePanel視圖是一個UIScrollView。

我想在側面板上堆疊2個視圖。
因此,我將以下約束添加到_sidePanel_。

_sidePanelView addConstraints: 
    @"|[_top(300)]|" 
    @"|[_bottom(300)]|" 
    @"V:|[_top]-5.0-[_bottom]|" 

看來我需要指定這兩個視圖的寬度,以避免模棱兩可。

但我想仰視圖,以填補__sidePanel_的剩餘空間。

如果我剛針__bottom_到__top_的底部(它可以獲取在根據它的內容的某一點定義的高度)和它的父__sidePanel_,所述__sidePanel_的底部和__bottom_都是不明確;這是有道理的我猜測,因爲約束是非常相似的(並且不會通過將__bottom_的約束添加到__sidePanel_視圖而不是最頂層的self.view來避免)。

如果我硬編碼爲__bottom_的高度,我解決歧義,但我不想定義的高度;我想要它填充__sidePanel_中的剩餘空間。

任何建議,我可以嘗試解決歧義,但仍然實現我所追求的?

回答

1

對我來說,它來到了一個事實,即認爲我是想有子視圖限制在其邊界是一個UIScrollView,這是沒有發生。我將它改爲UIView,因此我的約束條件起作用。在那裏你有它。

3

您需要指定頂部或底部的高度 - 聽起來頂部在某個點獲得了定義的高度,但您需要爲其設置一個定義的高度最初爲,稍後可以更改。

而且,沒有必要指定頂部或底部的寬度(300),因爲你已經他們釘在側面板,其本身具有定義的寬度的兩側。所以這些約束工作得很好,沒有歧義:

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_sidePanel(300)]-1.0-[_mainPanel]|" options:0 metrics:nil views:viewsDict]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_sidePanel]|" options:0 metrics:nil views:viewsDict]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_mainPanel]|" options:0 metrics:nil views:viewsDict]]; 

    [_sidePanelView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_top]|" options:0 metrics:nil views:viewsDict]]; 
    [_sidePanelView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_bottom]|" options:0 metrics:nil views:viewsDict]]; 
    [_sidePanelView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_top]-5.0-[_bottom]|" options:0 metrics:nil views:viewsDict]]; 
    self.topHeightCon = [NSLayoutConstraint constraintWithItem:self.top attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:300]; 
    [self.top addConstraint:self.topHeightCon]; 

後來,當你計算出實際高度之上,你可以使用self.topHeightCon.constant =(一定值)來調整它的高度。

+0

中,我嘗試了上述概述,它的問題,如果我添加約束堆疊_top和_bottom意見self.view或_sidePanelView佈局?這種方式會有所作爲嗎? – topwik

+0

@towpse,我沒有嘗試過,但我懷疑它會影響。您應該將約束添加到視圖的超級視圖(或視圖本身的內部視圖,如高度和寬度)。 – rdelmar

+0

嘿所以我忘了提及_sidePanel是一個UIScrollView。我將其更改爲一個簡單的UIView,現在我的初始約束條件無需爲_top或_bottom指定高度。 – topwik