所以我正在尝试克隆Apple天气应用程序。我的ViewHierarchy
看起来像这样:
ViewControllerA
包含一个UIScrollView
,其中包含UIView
(UIView1)
,而UIView
包含子元素。{{1}下方还有一个按钮1}}在UIScrollView
内添加更多UIView
。
此UIScrollView
是使用UIViewController
在IB
中设计的。
当我理想地点击此按钮时,我想克隆AutoLayout
并将其添加到UIView1
,UIScrollView
内currentView
的右前端。这是一个水平滚动功能。这是我被困的地方。
我尝试的是以下内容:
在UIScrollView
中创建UIView1
的副本并加载该副本。
以编程方式创建xib
并加载它。
在这两种情况下,我都面临着汽车布局限制问题。当我加载第二个视图时,它会覆盖在现有视图的顶部。
我可以对克隆的UIView
的帧大小进行硬编码并使其正常工作,但显然这不适用于跨设备。
所以我添加了约束 - 就像这样:
UIView
应用程序崩溃无法加载此约束,表明视图层次结构不支持此约束,因为未加载所有视图。
我将继续深入探讨如何解决这个问题,但我们将非常感谢您的帮助。这是我的func buildView(startX:CGFloat, model:CityModel) -> UIView {
var frame:CGRect = CGRectMake(0, 0, insideScrollView.bounds.width, insideScrollView.bounds.height)
var cityView:UIView = UIView(frame: frame)
var lFrame:CGRect = CGRectMake(0, 0, 100,50)
var cLabel:UILabel = UILabel(frame: lFrame)
cLabel.text = model.name
cLabel.sizeToFit()
cLabel.textAlignment = .Center
//cityView.addSubview(cLabel)
cityView.layer.backgroundColor = UIColor.blueColor().CGColor
cityView.setTranslatesAutoresizingMaskIntoConstraints(false)
var constX = NSLayoutConstraint(item: cityView, attribute: NSLayoutAttribute.LeftMargin, relatedBy: NSLayoutRelation.Equal, toItem: cityScrollView, attribute: NSLayoutAttribute.LeftMargin, multiplier: 1, constant: 0)
cityView.addConstraint(constX)
return cityView
}
方法。 Cities是包含视图数据的模型数组
viewDidLoad
答案 0 :(得分:0)
代表@ k6sandeep发布答案。我没有在scrollview中加载视图,但是正在添加约束。因此,在加载内部视图后通过添加约束来修复相同的问题。