滚动视图大小与Autolayout:框架是紧凑型/任何尺寸的类600×480,大于iphone5?

我希望我的scrollview的框架与superview框架的大小相同。 并设置contentize,使其包含所有的imageViews。

问题是与AutoLayout,宽度和高度是600×480,我使用的iPhone5和尺寸类是W:紧凑/小时:任何。(我期望像这样的:320×523)。
我的约束是:与超视图相等的宽度,与超视图(乘法器0.8)相等的高度,水平中心X和垂直中心Y.

let pagesScrollViewSize = scrollView.frame.size println("pagesScrollViewSize : \(pagesScrollViewSize)") //600x480 scrollView.contentSize = CGSizeMake(pagesScrollViewSize.width * CGFloat(pageCount), pagesScrollViewSize.height) 

会有人知道如何解决这个问题吗? imageview显示比屏幕的框架更大,所以.SizeAspectFit不符合正确的尺寸。 而不是滚动到另一个imageView,它滚动查看图像的其余部分,我不想要的。

编辑:
这是ViewController.swift中的整个代码:

 class ViewController: UIViewController, UIScrollViewDelegate { @IBOutlet weak var pageControl: UIPageControl! @IBOutlet weak var scrollView: UIScrollView! var pageViews: [UIImageView?] = [] var pageImages : [UIImage?] = [] override func viewDidLoad() { super.viewDidLoad() pageImages = [UIImage(named:"photo1.png"), UIImage(named:"photo2.png"), UIImage(named:"photo3.png"), UIImage(named:"photo4.png")] let pageCount = pageImages.count pageControl.currentPage = 0 pageControl.numberOfPages = pageCount for _ in 0..<pageCount { pageViews.append(nil) } let pagesScrollViewSize = scrollView.frame.size println("pagesScrollViewSize : \(pagesScrollViewSize)") scrollView.contentSize = CGSizeMake(pagesScrollViewSize.width * CGFloat(pageCount), pagesScrollViewSize.height) loadVisiblePages() } //when scrolling func scrollViewDidScroll(scrollView: UIScrollView!){ loadVisiblePages() } func loadVisiblePages(){ let pageWidth = scrollView.frame.size.width let page = Int(floor( (scrollView.contentOffset.x * 2.0 + pageWidth) / (pageWidth*2.0) )) println("page: \(page)") pageControl.currentPage = page let firstPage = page-1 let lastPage = page+1 //remove all the pages before firstPage for var index = 0; index < firstPage; ++index{ purgePage(index) } //load pages in our range for var index = firstPage; index <= lastPage; ++index { loadPage(index) } //remove after lastPage for var index = lastPage+1; index < pageImages.count; ++index { purgePage(index) } } func loadPage(index:Int){ if index < 0 || index >= pageImages.count { return } if let pageView = pageViews[index] { //already loaded } else { var frame = scrollView.bounds frame.origin.x = frame.size.width * CGFloat(index) frame.origin.y = 0.0 println("\(frame)") var newImageView = UIImageView(image:pageImages[index]) newImageView.contentMode = .ScaleAspectFit newImageView.frame = frame scrollView.addSubview(newImageView) pageViews[index] = newImageView } } func purgePage(index:Int){ if index < 0 || index >= pageImages.count { return } if let pageView = pageViews[index] { pageView.removeFromSuperview() pageViews[index] = nil } } } 

谢谢

viewDidAppearviewDidLayoutSubviews之后,才会应用大小类(或任何自动布局更改)。 您将需要将此代码移到其中一个。 在从Interface Builder文档(xib或storyboard)中加载时,您将看到视图的框架。 在这些生命周期事件之后,您不应该检查框架。

无法在viewDidAppear之前正确设置框架