UIScrollView上的约束与分页

Lir*_*ivo 4 constraints ios autolayout swift

我有UIScrollView覆盖整个屏幕,在里面我有3个UIView并排的对象,通过分页管理.我想做出正确的约束,因此它也适合iPhone 6.

拖动时看起来像这样:

在此输入图像描述

这些约束条件UIScrollView运作良好,但我如何安排内部视图的约束UIScrollView

提前致谢!!

Rob*_*Rob 8

滚动视图的子视图需要两组约束.

  • 第一组是滚动视图及其子视图的前导/尾随和上/下约束之间的约束.请注意,与大多数约束不同,这并不表示子视图的大小,而只是它们与滚动视图之间的关系contentSize.

  • 第二组是子视图的宽度/高度与滚动视图的超视图之间的约束.这将使每个子视图成为显示的完整大小.

因此,以编程方式说明:

let scrollView = UIScrollView()
scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)
scrollView.pagingEnabled = true
view.addSubview(scrollView)

let redView = UIView()
redView.backgroundColor = UIColor.redColor()
redView.setTranslatesAutoresizingMaskIntoConstraints(false)
scrollView.addSubview(redView)

let greenView = UIView()
greenView.backgroundColor = UIColor.greenColor()
greenView.setTranslatesAutoresizingMaskIntoConstraints(false)
scrollView.addSubview(greenView)

let blueView = UIView()
blueView.backgroundColor = UIColor.blueColor()
blueView.setTranslatesAutoresizingMaskIntoConstraints(false)
scrollView.addSubview(blueView)

let views = [
    "scrollView" : scrollView,
    "blueView"   : blueView,
    "greenView"  : greenView,
    "redView"    : redView,
    "view"       : view
]

view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollView]|", options: nil, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView]|", options: nil, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[redView(==view)]|", options: nil, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[greenView(==view)]|", options: nil, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[blueView(==view)]|", options: nil, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[redView(==view)][greenView(==view)][blueView(==view)]|", options: nil, metrics: nil, views: views))
Run Code Online (Sandbox Code Playgroud)

这里的显着细节是(==view)可视格式语言(VFL)中的引用,它告诉子视图与视图控制器的主视图的大小相同.注意,您不必使用VFL执行此操作(您也可以在IB中执行此操作),但这只是表达约束的便捷方式.

顺便说一下,Apple在技术说明TN 2154中讨论了这种行为.