let N = 4
let holder = UIView(frame: CGRectMake(0, 0, someWidth, N * 100))
for var i = 0; i <= N; i++ {
let content = UIView(frame: CGRect.zero) //height should be 100
content.backgroundColor = randomColor()
content.translatesAutoresizingMaskIntoConstraints = true
holder.addSubview(content)
}
上面的代码会将 N 个 UIView 添加到 holder
。我想以编程方式使用 NSLayoutConstraints
垂直显示内容,一个在另一个之上。
每个内容的高度应为 100。每个内容的所有 4 个边都应有约束。第一个内容应该对 holder
有顶部/前导/尾随约束(常量=0)。最后的内容应该对 holder
有 bottom/leading/trailing constraints (constant=0)。
其余内容应对其他同级内容具有顶部/底部约束(常量=8)。
如何创建这些约束?
最佳答案
我对水平页面做了同样的事情。所以这里是代码
var scrollView = UIScrollView()
var contectView = UIView();
添加holderview的子View
self.scrollView.translatesAutoresizingMaskIntoConstraints = false;
self.view.addSubview(self.scrollView);
self.contectView.translatesAutoresizingMaskIntoConstraints = false;
self.scrollView.addSubview(self.contectView);
为holderView创建约束
let views = ["contectView" : self.contectView , "scrollview" : self.scrollView ];
// create constraint for scrollview
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollview]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollview]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views))
// create constraint for contectview with low priority for width and height
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[contectView(==scrollview@250)]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views))
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[contectView(==scrollview@250)]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views))
制作水平字符串约束
var verticalConstraintsFormat = ""; // create horizantal constraint string
let subViews = NSMutableDictionary();
subViews["scrollView"] = self.scrollView;
创建动态页面
let totalPage : NSInteger = 10;
for i in 0...totalPage {
// Create your page here
let objProductView = UIView()
objProductView.translatesAutoresizingMaskIntoConstraints = false;
objProductView.backgroundColor = UIColor(white: CGFloat(arc4random()%100)/CGFloat(100), alpha: 1)
self.contectView.addSubview(objProductView);
let key = NSString(format: "productView%d", i) as NSString
subViews[key] = objProductView;
if(i==0){
verticalConstraintsFormat = verticalConstraintsFormat.stringByAppendingFormat("V:|-0-[%@(==100)]", key);
}
else if (i==totalPage) {
verticalConstraintsFormat = verticalConstraintsFormat.stringByAppendingFormat("-0-[%@(==100)]-0-|", key);
}
else{
verticalConstraintsFormat = verticalConstraintsFormat.stringByAppendingFormat("-0-[%@(==100)]", key);
}
let verticalConstraintsFormat1 = NSString(format:"H:|[%@(==scrollView)]", key);
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(verticalConstraintsFormat1 as String, options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: subViews as AnyObject as! [String : AnyObject]));
}
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(verticalConstraintsFormat as String, options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: subViews as AnyObject as! [String : AnyObject]));
希望这对您有所帮助。
关于ios - 如何垂直自动布局 UIView 列表,一个在另一个之上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37517877/