2015-12-07 50 views
0

我使用純代碼(不是故事板或xib)來設置所有視圖的大小,並且我不想使用硬代碼來設置框架,所以我使用砌體。ios在砌體中設置uiscrollview的內容

現在我有一個滾動視圖和一組的意見,滾動視圖的子視圖,代碼是這樣的:

[self.scrollview addSubview:[self.imageviews objectAtIndex:0]]; 
[[self.imageviews objectAtIndex:0] mas_makeConstraints:^(MASConstraintMaker *make) { 
    make.size.equalTo(self.scrollview); 
    make.top.equalTo(@0); 
    make.left.equalTo(@0); 
}]; 
for (NSInteger i = 1; i < maxcnt ; i++) { 
    [self.scrollview addSubview:[self.imageviews objectAtIndex:i]]; 
    UIImageView *previous = [self.imageviews objectAtIndex:i-1]; 
    [[self.imageviews objectAtIndex:i] mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.size.equalTo(self.scrollview); 
     make.top.equalTo(@0); 
     make.left.equalTo(previous.mas_right); 
    }]; 
} 

但這裏談到的問題:

1)如何使用砌體設置滾動視圖的contentsize?以下代碼不適用,因爲在循環事件中,self.view.frame.size.width發生更改。

self.scrollview.contentSize = CGSizeMake(self.imageviews.count * self.view.frame.size.width, self.view.frame.size.height); 

2)如果我有使用上的代碼來設置,如何應對旋轉事件使contentsize是更新好。

回答

2

你快到了。你所要做的就是在最後一個圖像視圖上設置一個正確的約束。通過這樣做,您可以在contentView的左側和右側之間創建一個「連接」。這樣UIScrollView「知道」子視圖需要多少空間並相應地調整contentSize

根本沒有必要設置contentSize。自動佈局爲您處理這個問題,它也可以在旋轉設備時使用。

我在前一段時間寫了一個blog post。它使用SnapKit,但這基本上只是「與斯威夫特砌體」的另一個名稱。語法幾乎相同。它描述了一個垂直滾動視圖,但這個想法在水平滾動視圖中是相同的。

一個更小的事情:

make.top.equalTo(self.scrollview.mas_top); 

你可以這樣做:

而不是做這個的

make.top.equalTo(self.scrollview); 
+0

你確定這一點,夥計?如果我不明確設置「contentsize」,那麼scrollview根本不會滾動。 – FisherMartyn

+0

100%確定。如果在最後一個子視圖上設置了正確的約束,它將開始滾動。 scrollview不滾動,因爲沒有缺少'right'約束,它無法知道contentView必須是多大。 – joern

+0

非常感謝!這樣可行。而且你的博客也很棒。 – FisherMartyn