UIScrollView

时间:2017-03-06 03:48:56

标签: swift uiscrollview nslayoutconstraint scroll-paging

我之后的效果:在滚动时仅显示图像之间的间距(如照片应用)。

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

pagingEnabled的文档声明:

  

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

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

enter image description here

因此,如果滚动宽度较长,为什么不分页适当的距离?

    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)

2 个答案:

答案 0 :(得分:2)

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

所以,让我们说这些图像是100点宽。让我们说图像之间的空间是10分。然后:

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

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

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

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

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

enter image description here

答案 1 :(得分:0)

事实证明我设置的宽度约束相同,我忘记了。这意味着在超视图的宽度上修改了scrollview页面的倍数。