2016-06-10 57 views
0

我创建了一个非常简单的细节视图,有几张图片,用户可以通过顶部进行翻页,并在底部的项目名称上有一些细节。但是我的滚动视图没有页面到正确的地方,像这样:UIScrollView无法分页正确的距离

enter image description here

我的滚动视图的框架&其子视图的框架设置如下:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.pictures.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height/CGFloat(2)) 
    self.pictures.clipsToBounds = false 
    let width = pictures.frame.width 
    let height = pictures.frame.height 



    /* 

    let view1 = UIView(frame: CGRectMake(pictures.frame.origin.x, 0, scrollViewWidth, scrollViewHeight)) 
    let view2 = UIView(frame: CGRectMake(pictures.frame.origin.x + scrollViewWidth, 0, scrollViewWidth, scrollViewHeight)) 
    let view3 = UIView(frame: CGRectMake(pictures.frame.origin.x + scrollViewWidth * 2, 0, scrollViewWidth, scrollViewHeight)) 
    let view4 = UIView(frame: CGRectMake(pictures.frame.origin.x + scrollViewWidth * 3, 0, scrollViewWidth, scrollViewHeight)) 

    */ 

    for index in 0...2 { 
     let frame = CGRectMake(width * CGFloat(index), 0, width, height) 
     let view = UIView(frame: frame) 
     views.append(view) 
     pictures.addSubview(view) 
    } 

    views[0].backgroundColor = UIColor.redColor() 
    views[1].backgroundColor = UIColor.blueColor() 
    views[2].backgroundColor = UIColor.orangeColor() 


    pictures.delegate = self 
    pictures.contentSize = CGSizeMake(width * CGFloat(views.count), height) 


} 

有没有人有任何建议,我怎么能适应这个?我是否错误地实现了我的滚动视图?

+0

你有没有考虑过使用'UICollectionView'而不是'UIScrollView'? – Magoo

+0

如何将幻灯片类型接口与UICollectionView结合? –

+0

'UICollectionView'基于'UIScrollView',因此具有'pagingEnabled',它也可以水平滚动使用它的流布局 – Magoo

回答

0

问题是您试图访问viewDidLoad()函数中的self.view.frame。当时它所称的视图还没有正确布置。视图的框架将与您在故事板中指定的大小相同,大概{0,0,600,600}。

解决方案:您可以将您的页面初始化代码设置为viewWillAppear,或者您可以考虑使用自动布局,而不是直接操作框架。

+1

不幸的是将初始化代码移动到viewWillAppear没有解决问题,尽管这是一个很好的猜测:/ –

+0

我是避免自动布局会导致滚动浏览的视图数量(以及随后的scrollView内容大小)将取决于上传的图片数量。其中大部分是动态的,所以我决定以编程方式执行 –

+0

viewDidLoad应该具有正确的视图大小,但应该使用具有灵活高度,宽度和左边距的同意的自动调整大小掩码。 viewWillAppear不是布局代码的好地方。 – Magoo

0

您必须在宽度中添加+20,因为在scrollView中,两个页面之间有一些空间可用。 因此,添加20它可能会解决您的问题。