Ios Swift:如何将UIScrollView内容大小高度设置为内容高度?

Ios Swift:如何将UIScrollView内容大小高度设置为内容高度?,ios,swift,uiscrollview,Ios,Swift,Uiscrollview,我有一个全景。现在,我只是将其设置为屏幕高度的两倍(本例中的框架只是UIScreen.mainScreen().bounds): class VenueDetailView:UIScrollView{ 必选初始化?(编码员aDecoder:NSCoder){fatalError(“情节提要让我伤心”)} 重写初始化(帧:CGRect){ super.init(frame:frame) contentSize=CGSize(宽度:frame.width,高度:frame.height*2) 这是否

我有一个全景。现在,我只是将其设置为屏幕高度的两倍(本例中的框架只是
UIScreen.mainScreen().bounds
):

class VenueDetailView:UIScrollView{
必选初始化?(编码员aDecoder:NSCoder){fatalError(“情节提要让我伤心”)}
重写初始化(帧:CGRect){
super.init(frame:frame)
contentSize=CGSize(宽度:frame.width,高度:frame.height*2)
这是否意味着我必须在添加所有子视图后设置contentSize


基本上是的。您的目标应该是使滚动视图变小,而内容大小变大。这就是使滚动视图可滚动的原因:它的
contentSize
大于它自己的边界大小。因此,将滚动视图本身设置为有一个
frame
,它与superview的
bounds
相同,但随后设置它的
contentSize
包含其所有子视图。

滚动视图的问题是,您不应该真正使滚动视图大小等于内容大小!!!如果这样做,滚动视图将不会滚动!!!内容大小应大于滚动视图大小我希望我的内容非常长,因此将内容大小设置为屏幕高度的2倍屏幕使其可滚动。然而,我希望内容大小为子视图的总高度。我如何找到uiscrollview的所有子视图的总高度?在我的书中,这里是我这样做的一个例子:在这个例子中,滚动视图是用代码创建的,它的所有内容也是如此,因此我了解了通过观察我放置它们的位置来显示内容;但是在故事板编辑器中完全可以实现同样的事情,后面的示例说明了这一点。想想最底部的视图。它有一个
框架
。这意味着它有一个
原点.y
(其顶部)和一个
size.height
。总和是其底部的
y
值。但它是最底部的视图。因此,最底部视图底部的
y
值总和是
contentSize
的高度(如果愿意,可以添加多一点作为底部填充)。您可能想阅读我的书:在线版本是Objective-C,而不是Swift(当前版本是Swift),但您会理解这些概念。我只想说,这是我见过的关于UIScrollView关键参数的最简洁的答案之一。
class VenueDetailView: UIScrollView {
  required init?(coder aDecoder: NSCoder) { fatalError("Storyboard makes me sad.") }

  override init(frame: CGRect) {
    super.init(frame: frame)
    contentSize = CGSize(width: frame.width, height: frame.height*2) <----------------

    backgroundColor = UIColor.greenColor()
  }


  func addBannerImage(imageUrl: NSURL) {
    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width, height: 300))

    // TODO: Make this asynchronous
    // Nice to have: cache the image
    if let data = NSData(contentsOfURL: imageUrl) {
      imageView.image = UIImage(data: data)
    }

    addSubview(imageView)
  }
}