对于我来说,在viewDidLoad中添加子视图是有意义的,因为它在视图加载时获取调用,但我无法通过子视图来实现。我有子视图哪个框架取决于另一个已经添加的子视图的高度和宽度,高度和宽度在viewDidAppear之前是不正确的。所以我在viewDidAppear中添加了我的子视图,但viewDidAppear在每次出现视图时都会调用它,这很糟糕。所以现在我的解决方案,我添加我的子视图在viewDidAppear和视图消失时,我删除viewDidDisappear中的子视图。如果没有我从超级视图手动删除子视图,是否有另一种方法来实现这一点。在viewcontrollers生命周期中添加子视图的位置
例
override func viewDidAppear(animated: Bool) {
print(PercentageView.frame.width)
print(PercentageView.frame.height)
CreateInfoRecipeLabels()//Add subviews
CreateCircleDiagram() //Add subviews
}
override func viewDidDisappear(animated: Bool) {
//When view disappear deallocate subviews
for view in PercentageView.subviews {
view.removeFromSuperview()
}
}
UPDATE - 尝试这种代替,但它是像以前有一个框架它可以不加子视图?
@IBOutlet weak var RecipeInfoContain: UIView!
var MinLabel: SMIconLabel?
var Min = "15"
override func viewDidLoad() {
super.viewDidLoad()
RecipeInfoContain.addSubview(MinLabel!)
// Do any additional setup after loading the view.
}
override func viewWillLayoutSubviews() {
MinLabel = SMIconLabel(frame: CGRectMake(RecipeInfoContain.frame.width/4 - 50, RecipeInfoContain.frame.height/2 - 10, 100, 20))
MinLabel!.text = Min + " min"
//MinLabel.backgroundColor = UIColor.redColor()
MinLabel!.font = UIFont(name: "OpenSans", size: 11)
MinLabel!.textColor = UIColor.whiteColor()
MinLabel!.icon = UIImage(named: "Clock")
MinLabel!.clipsToBounds = true
MinLabel!.iconPadding = 5
MinLabel!.iconPosition = .Left
MinLabel!.textAlignment = .Left
}
感谢您的回答@Rob,但我试图在viewDidLoad中添加子视图,然后在viewWillLayoutSubviews中使用CGRectMake设置框架,但程序崩溃。看到我的编辑问题 –
嗯。我试了一下,它工作正常:https://gist.github.com/robertmryan/8af2c98902e39a60e177。看看你的代码示例,你正在'viewDidLoad'中展开'MinLabel',但是你没有实例化它,直到viewWillLayoutSubviews。实例化应该在尝试执行'addSubview'之前发生。 – Rob
我的不好。我忘了初始化子视图。感谢您的帮助! –