2015-09-30 73 views
0

我需要什麼樣的iOS的自動佈局VS滾動型:Contentsize問題

我有一個滾動視圖具有以下層次:

滾動型
。^contentView(UIView)
。 -^view1(黃色)
。 - ^視圖2(灰色)

view1(黃色)具有固定的高度和被固定在內容查看的頂部。我已經指定了除高度view2之外的所有約束條件。因爲我正在以編程方式爲view2(灰色)添加子視圖,並且將具有隨機高度。

問題是我在如何設置view2的高度限制方面處於虧損狀態。爲了計算contentSize,scrollview需要從頂部到底部運行約束。但view2的高度只有在添加子視圖後纔會確定,當然,這將對確定高度有所需的所有限制。

我試過

1)我的第一個計劃是添加子視圖和編程設置它的約束,使滾動視圖高興。像這樣:

detailsView = [ProfileDetailsView instantiateFromNib]; 
[self.detailHolder addSubview:detailsView]; 

[self.detailHolder addConstraint:[NSLayoutConstraint constraintWithItem:detailsView 
                 attribute:NSLayoutAttributeTop 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:self.detailHolder 
                 attribute:NSLayoutAttributeTop 
                multiplier:1.0 
                 constant:0.0]]; 

[self.detailHolder addConstraint:[NSLayoutConstraint constraintWithItem:detailsView 
                 attribute:NSLayoutAttributeLeading 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:self.detailHolder 
                 attribute:NSLayoutAttributeLeading 
                multiplier:1.0 
                 constant:0.0]]; 

[self.detailHolder addConstraint:[NSLayoutConstraint constraintWithItem:detailsView 
                 attribute:NSLayoutAttributeBottom 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:self.detailHolder 
                 attribute:NSLayoutAttributeBottom 
                multiplier:1.0 
                 constant:0.0]]; 

[self.detailHolder addConstraint:[NSLayoutConstraint constraintWithItem:detailsView 
                 attribute:NSLayoutAttributeTrailing 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:self.detailHolder 
                 attribute:NSLayoutAttributeTrailing 
                multiplier:1.0 
                 constant:0.0]]; 

的問題是,Xcode中給我的錯誤ScrollView has ambiguous scrollable content height。我無法給出view2的固定高度,因爲我稍後添加的子視圖將具有設置ScrollView的contentSize的所有必要約束條件。

2)然後我嘗試給view2添加一個高度約束,使其具有較低的優先級,這樣當子視圖約束啓動時,高度約束將被覆蓋。但由於某種原因,這似乎不起作用。

回答

3

你可以給視圖2這將在運行時自動被刪除,使快樂

enter image description here

+0

哇!像魅力一樣工作!謝謝哥們。還有一件事 - 起初它沒有工作,但後來我添加了detailsView。translatesAutoresizingMaskIntoConstraints = NO;'它工作。我會添加並接受。再次感謝。 – ShahiM

+0

對不起,我忘了,自動佈局systen會自動將視圖的自動調整掩碼轉換爲約束,所以你應該將它設置爲no手動 – John

1

我建議, 你高度約束添加到視圖2並鏈接一個IBOutlet自動佈局系統的佔位符大小高度限制。

由於

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint; 

然後,就在你編程方式添加約束視圖2子視圖,從視圖2取出高度約束,使用

[view2 removeConstraint:self.heightConstraint]; 

,然後以編程方式添加您的約束。