4

我追求的效果:只有在滚动时才可见的图像之间的间距(如照片应用程序)。

许多旧的 obj-c 答案建议将滚动视图的边界扩展到屏幕外以使其页面更远,并使此屏幕外空间成为图像之间的间隙。

pagingEnabled 的文档指出:

如果此属性的值为 YES,则当用户滚动时,滚动视图会在滚动视图边界的倍数处停止。

因此,在尝试更改倍数时,我扩展了滚动视图的宽度,并启用了左分页。然而,没有答案我实现页面超出了差距 - 他们总是把它留在视野中:

在此处输入图像描述

那么如果滚动宽度更长,为什么它不分页适当的距离呢?

    let gapMargin = CGFloat(20)
    scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width + gapMargin, height: view.frame.height)
    let exdScrollWidth = scrollView.frame.width

    //1
    let imageView1 = UIImageView()
    imageView1.backgroundColor = UIColor.green
    imageView1.frame = CGRect(x: 0, y: 0, width: exdScrollWidth - gapMargin, height: scrollView.bounds.size.height)

    //2
    let imageView2 = UIImageView()
    imageView2.backgroundColor = UIColor.yellow
    imageView2.frame = CGRect(x: exdScrollWidth, y: 0, width: exdScrollWidth - gapMargin, height: scrollView.bounds.size.height)

    //3
    let imageView3 = UIImageView()
    imageView3.backgroundColor = UIColor.red
    imageView3.frame = CGRect(x: exdScrollWidth * 2, y: 0, width: exdScrollWidth - gapMargin, height: scrollView.bounds.size.height)

    scrollView.contentSize.width = exdScrollWidth * 3

    scrollView.addSubview(imageView1)
    scrollView.addSubview(imageView2)
    scrollView.addSubview(imageView3)
4

2 回答 2

6

正如文档告诉您的那样,一个“页面”宽度是滚动视图的边界宽度。

所以假设图像是 100 点宽。假设图像之间的空间是 10 点。然后:

  • 滚动视图的宽度必须为 110 磅。

  • 空间必须在每张图像的每一侧分布 5 个点,如下所示(假设我们有 3 张图像):

    5pts - 100pts (im) - 10pts - 100pts (im) - 10pts - 100pts(im) - 5pts
    

这将导致每个页面包含一个 100pt 的图像,每边有 5 pts 的空间,总共 110 pts,滚动视图的宽度:

    5pts - 100pts (im) - 10pts - 100pts (im) - 10pts - 100pts(im) - 5pts
    |                      |                      |                    |

在此处输入图像描述

于 2017-03-06T04:47:03.430 回答
0

事实证明,我设置了一个我忘记的等宽约束。这意味着滚动视图分页的倍数固定在父视图的宽度上。

于 2017-03-20T09:59:11.490 回答