【发布时间】:2015-06-04 11:33:25
【问题描述】:
我正在尝试从这个线框实现视图控制器
由于我们有不同的屏幕分辨率 - 屏幕上可以容纳不同数量的黄色视图。所有黄色视图的大小相同UIImageViews,包含相同的图像。
我要做的是在情节提要中布局视图控制器,但黄色视图除外。然后我计算可以容纳的黄色视图数量,并使用代码中的自动布局添加它们。像这样:
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()
}
【问题讨论】:
-
你在
viewWillLayoutSubviews()或viewDidLayoutSubviews()试过了吗? -
您需要在 self.view 上致电
layoutIfNeeded
标签: ios iphone swift cocoa-touch autolayout