使用嵌入式 UIView 调整 UIScrollView 的 contentSize?

Posted

技术标签:

【中文标题】使用嵌入式 UIView 调整 UIScrollView 的 contentSize?【英文标题】:Adjust UIScrollView's contentSize with an embedded UIView? 【发布时间】:2015-05-31 15:42:54 【问题描述】:

我有一个 UIScroll 视图,它只包含一个子视图。名为contentView的子视图是一个UIView。这是我在viewDidLoad() 中所做的:

self.scrollView = UIScrollView()
self.view.addSubview(self.scrollView)
self.scrollView.backgroundColor = UIColor.yellowColor()

// pin all edges to the edges of the superview (self.view)
self.scrollView.snp_makeConstraints  (make) -> Void in
  make.edges.equalTo(self.view)


// create contentView
self.contentView = UIView()
self.contentView.backgroundColor = UIColor.redColor()
self.scrollView.addSubview(self.contentView)

// pin the edges of the contentView to the scrollView
self.contentView.snp_makeConstraints  (make) -> Void in
  make.edges.equalTo(self.scrollView) 


let myView = UIView(frame: CGRectMake(100, 100, 20, 300))
myView.backgroundColor = UIColor.greenColor()
self.contentView.addSubview(myView)

结果是这样的:

如上一个屏幕截图所示,没有红色的 contentView。

接下来,我尝试调整viewDidLayoutSubviews()中的contenView的大小:

let newSize: CGSize = self.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
println("newSize: \(newSize)")

结果是:

newSize: (0.0, 0.0)

如何设置正确的 contentView 大小或设置 UIScrollView 的 contentSize 的正确大小?

【问题讨论】:

你发现了吗?很想知道你做了什么... 您必须将绿色视图的底部边缘固定到 contentView 的底部。 【参考方案1】:

你试过设置 UIScrollView 的var contentSize: CGSize 吗?文档说

讨论 大小单位是点。默认大小为 CGSizeZero。

如果您不知道内容视图的大小,那么我建议您设置

scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth| UIViewAutoresizingFlexibleHeight);

scrollView.autoresizesSubviews = YES;

很好的衡量标准。

【讨论】:

问题是我不知道内容的大小是由contentView里面的views决定的。

以上是关于使用嵌入式 UIView 调整 UIScrollView 的 contentSize?的主要内容,如果未能解决你的问题,请参考以下文章

嵌入视图并调整其大小

我怎么能在像 Path 这样的 UIView 中嵌入视频?

调整容器视图的高度以匹配子视图的高度

使用UIToolbar调整UIView的大小不会同时调整大小

使用带有修复底部 UIView 的自动布局调整 UIView 的大小

创建 UIView 越狱调整