我正在尝试从此线框实现视图控制器
由于我们有不同的屏幕分辨率 - 屏幕上可以显示不同数量的黄色视图。所有黄色视图的大小UIImageView
都相同,包含相同的图像。
我要做的是在故事板中布局视图控制器,黄色视图除外。然后我计算屏幕可以容纳的黄色视图数量,并在代码中使用自动布局添加它们。像这样:
let numberOfViewsPerSide = numberOfViewsOnEachSide()
let viewImage = UIImage (named: "repeat_image")
var prevView = centerImageView
if let viewImage = viewImage {
for index in 0...(numberOfViewsPerSide - 1) {
var newView = UIImageView(image: viewImage)
newView.setTranslatesAutoresizingMaskIntoConstraints(false)
let views = ["prevView" : prevView, "newView" : newView]
self.view.addSubview(newView)
let constraint_H = NSLayoutConstraint.constraintsWithVisualFormat("H:[newView]-15-[prevView]", options: NSLayoutFormatOptions.AlignAllCenterY, metrics: nil, views: views)
self.view.addConstraints(constraint_H)
prevView = newView
}
}
问题是在viewDidLoad
和viewWillAppear
方法中,尚未触发自动布局。所以centerImageView
没有正确的大小和位置。此时,它的超级视图为nil
。所以我基本上不能添加约束来查看没有父级。
我的代码在viewDidAppear
方法中工作,但这意味着只有在过渡动画完成后才会出现所有黄色视图。
如果不在故事板中或在代码中完成任何操作,您是否知道如何实现它? UILabel
,图片上的UIButton
已删除为绿色centerView
- 如果我在代码中添加centerView
,我需要在代码中为此屏幕设置所有约束。
更新
@pteofil提供的解决方案为我工作
所以我在viewWillAppear
中调用上面的代码:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.view.layoutIfNeeded()
addRepeatedImages()
}
答案 0 :(得分:2)
您可以使用layoutIfNeeded
触发自动布局,并让您的观看次数正确。
但是您的黄色视图几乎可以使用UICollectionView
来管理它们......
答案 1 :(得分:1)
您可以将所有黄色视图嵌入到您在界面构建器中定位的容器视图中。现在,您可以在代码中完成此视图中的所有内容。