2014-10-07 58 views
0

我一直在尋找解決這個奇怪的自動佈局問題。我試圖建立一個5頁的分頁UIScrollView。每個頁面都有自己的container,這是一個通用的UIView。我目前的設置是這樣的:Autolayout沒有UIScrollView

UIView *container = [[UIView alloc] init]; 
container.translatesAutoresizingMaskIntoConstraints = NO; 
NSLayoutConstraint *width =[NSLayoutConstraint 
    constraintWithItem:container 
    attribute:NSLayoutAttributeWidth 
    relatedBy:0 
    toItem:self.headlineView 
    attribute:NSLayoutAttributeWidth 
    multiplier:1.0 
    constant:0]; 
NSLayoutConstraint *height =[NSLayoutConstraint 
    constraintWithItem:container 
    attribute:NSLayoutAttributeHeight 
    relatedBy:0 
    toItem:self.headlineView 
    attribute:NSLayoutAttributeHeight 
    multiplier:1.0 
    constant:0]; 
NSLayoutConstraint *top = [NSLayoutConstraint 
    constraintWithItem:container 
    attribute:NSLayoutAttributeTop 
    relatedBy:NSLayoutRelationEqual 
    toItem:self.headlineView 
    attribute:NSLayoutAttributeTop 
    multiplier:1.0f 
    constant:0.f]; 
NSLayoutConstraint *left = [NSLayoutConstraint 
    constraintWithItem:container 
    attribute:NSLayoutAttributeLeft 
    relatedBy:NSLayoutRelationEqual 
    toItem:self.headlineView 
    attribute:NSLayoutAttributeLeft 
    multiplier:index 
    constant:self.headlineView.frame.size.width]; 
[self.headlineView addSubview:container]; 
[self.headlineView addConstraints:@[width, height, top, left]]; 

語境:這就是所謂的內for循環執行5次,變量index增量,其中每個時間。這是正常工作。

基於最後一個約束,我認爲這會產生所需的效果。乘數每次(0-4)都會將左邊緣移動一個單位的滾動視圖的框架。

實際結果很奇怪。所有5個視圖都位於滾動視圖的第二頁上,彼此重疊。

乘法器和常量參數是否像我認爲的那樣不被使用?我在這裏搞什麼?

回答

0

最好的猜測是,該視圖並未畫出self.headlineView的框架。如果你把一個NSLog(CGStringFromRect(self.headlineView.frame));您設置的約束之前,我打賭它會是0

嘗試調用:

[view setNeedsLayout]; 
[view layoufIfNeeded]; 

...之前設置的限制,或嘗試調用內部的約束方法viewDidLayoutSubviews而不是(假設viewDidLoad?)。

+0

該框架不是0.它已經設置了寬度和高度成員。在約束之前調用這兩個方法什麼也不做。 – erdekhayser 2014-10-07 00:48:41

+0

布拉特!回到繪圖板 – brandonscript 2014-10-07 00:49:38

+0

這個問題似乎是''左''約束沒有做我認爲會。其他限制正常工作,但最後一個似乎是問題。 – erdekhayser 2014-10-07 01:06:56

0

顯然,乘數和常數參數不會做我認爲他們做的事(或他們打算做什麼)。

我的原始佈局放在index作爲乘數和視圖寬度作爲常數。但是,事實證明,我需要爲常量參數進行計算。

CGFloat offset = index * self.headlineView.frame.size.width; 
NSLayoutConstraint *left = [NSLayoutConstraint 
    constraintWithItem:container 
    attribute:NSLayoutAttributeLeft 
    relatedBy:NSLayoutRelationEqual 
    toItem:self.headlineView 
    attribute:NSLayoutAttributeLeft 
    multiplier:1.0f 
    constant:offset]; 
相關問題