【发布时间】:2015-01-21 00:23:43
【问题描述】:
我正在尝试以编程方式创建一个视图控制器,它将以可滚动的方式布置子视图。我正在尝试将 AutoLayout 与 UIScrollView 一起使用,并已阅读这方面的所有技术说明和 SO 答案。但我无法做到这一点 - 似乎我在这里缺少的创建/使用或 UIScrollView 有一些细微差别。
我的代码在下面,我看到的输出也显示在下面的图片中。
我的期望是我会看到占据整个屏幕的棕色和绿色条纹(子视图)。我知道我必须指定子视图的高度,但我不明白为什么水平尺寸不起作用。如果我没有指定水平尺寸,我希望我的子视图会被拉伸并占据屏幕的宽度,但事实并非如此。
这是我的控制器的代码。
class ScrollableRowHeadersViewController : UIViewController {
var scrollView : UIScrollView!
override func loadView() {
self.view = UIView(frame: CGRectZero)
scrollView = UIScrollView()
scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(scrollView)
scrollView.backgroundColor = UIColor.blueColor()
self.view.addVisualConstraint("H:|-0-[scrollView]-0-|", viewsDict: ["scrollView" : scrollView])
self.view.addVisualConstraint("V:|-0-[scrollView]-0-|", viewsDict: ["scrollView" : scrollView])
self.view.contentMode = UIViewContentMode.Redraw
}
//load all the subviews after the main view and scrollview loaded.
override func viewDidLoad() {
var viewsDict = [String: UIView]()
var vertical_constraints = "V:|"
scrollView.autoresizesSubviews = true
for i in 1...100 {
var subview = UIView()
subview.setTranslatesAutoresizingMaskIntoConstraints(false)
subview.backgroundColor = (i%2 == 0 ? UIColor.brownColor() : UIColor.greenColor())
viewsDict["subview_\(i)"] = subview
self.scrollView.addSubview(subview)
vertical_constraints += "[subview_\(i)(==50)]"
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[subview_\(i)]|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict))
}
vertical_constraints += "|"
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(vertical_constraints, options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict))
}
}
这是水平约束设置为 H:|[subview_(i)]|
的输出这是水平约束设置为 H:|[subview_(i)(==100)]|
的输出在任何一种情况下,我都希望在整个屏幕宽度上看到交替出现的棕色和绿色条纹。
我错过了什么?提前感谢您的帮助。
【问题讨论】:
标签: ios swift uiscrollview autolayout