Для меня имеет смысл добавить subviews в viewDidLoad, потому что он получает вызов при загрузке представления, но я не могу сделать это с моими областями. У меня есть subviews, кадр которого зависит от другой уже добавленной высоты и ширины subviews, а высота и ширина не верны перед viewDidAppear. Поэтому я добавляю свои subviews в viewDidAppear, но viewDidAppear получает вызов каждый раз, когда появляется представление, которое плохо. Поэтому для моего решения прямо сейчас я добавляю свои subviews в viewDidAppear, и когда исчезает представление, я удаляю subviews в viewDidDisappear. Есть ли другой способ архивировать это без моего ручного удаления subviews из супервизора.Где добавить subviews в жизненном цикле 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, а затем установить рамки с CGRectMake в viewWillLayoutSubviews, но программа падает. См. Мой вопрос редактирования –
Хм. Я попробовал, и он отлично работает: https://gist.github.com/robertmryan/8af2c98902e39a60e177. Рассматривая образец кода, вы разворачиваете 'MinLabel' в' viewDidLoad', но вы не создаете экземпляр до 'viewWillLayoutSubviews'. Реализация должна произойти до того, как вы попытаетесь сделать 'addSubview'. – Rob
Мой плохой. Я забыл запустить subview. Спасибо за помощь! –