我有一個UIScrollView包含幾個動態調整大小的子視圖。我可以調整和佈局的子視圖很好,但是當我設置滾動視圖本身的內容大小時,底部的子視圖被裁剪。滾動視圖的內容大小高度應該大於它包含的視圖高度之和的原因有什麼原因嗎?UIScrollView內容大小剪切子視圖,當它不應該
這是我的情況更詳細: 我有一個超級查看包含UIScrollView包含幾個子視圖。在superview的layoutSubviews方法中,我計算了每個子視圖所需的大小,然後設置框架使子視圖在屏幕之間垂直平鋪,並在它們之間留出一點空間。完成後,我將UIScrollView的內容大小的高度設置爲最後一個子視圖的結尾(origin.y + size.height)。理論上,這意味着滾動視圖的內容區域的底部應該與最後一個子視圖的底部完全對齊。
但它沒有。相反,最後一個子視圖的一個很好的塊被剪切。它仍然存在 - 如果向下滾動,我可以看到「反彈」期間的剩餘部分。在橫向模式下問題更加嚴重 - 底部子視圖的很大一部分根本不可見。
子視圖全部安排妥當。問題是UIScrollView的contentSize似乎需要比子視圖的高度之和(加上它們之間的空間)大得多。這對我來說沒有任何意義。此外,大小是「關閉」的數量是不同的 - 我重複使用這個視圖多次不同的子視圖,並且他們都是不同的數量。因此,簡單地向內容視圖高度添加常量將無濟於事。
是什麼導致內容大小(或我的身高計算)無法正常工作?
代碼:
- (void)layoutSubviews
{
[super layoutSubviews];
CGFloat width = self.bounds.size.width - [self subviewLeftMargin] - [self subviewRightMargin]; // All subviews have same width as parent view
CGFloat x = [self subviewLeftMargin]; // All subviews should start at the far left of the view
CGFloat y = [self spaceBetweenSubviews]; // Running tally of the y coordinate for the next view
/* Adjust the subviews */
for(UIView *view in self.theVariousSubviews) {
/* Resize the view with the desired width, then let it size its height as needed */
view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, width, view.frame.size.height);
CGSize newSize = [view sizeThatFits:view.frame.size];
/* Set the origin */
//The subviews are positioned correctly, so this doesn't seem to be a problem
view.frame = CGRectMake(x, y, newSize.width, newSize.height);
/* Have the view refresh its own layout */
[view setNeedsLayout];
/* Update the y value for the next subview */
y += newSize.height + [self spaceBetweenSubviews];
}
/* Resize the scroll view to ensure it fits all of the content */
CGFloat scrollViewHeight = y;
self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, scrollViewHeight);
//Content size is set to the same total height of all subviews and spacing, yet it is too small. Why?
}