gpt4 book ai didi

swift - 在 View Controller 生命周期中的何处添加 subview

转载 作者:搜寻专家 更新时间:2023-11-01 07:28:46 24 4
gpt4 key购买 nike

对我来说,在 viewDidLoad 中添加 subview 是有意义的,因为它会在 View 加载时被调用,但我不能用我的 subview 这样做。我有 subview ,其框架取决于另一个已添加的 subview 的高度和宽度,并且在 viewDidAppear 之前高度和宽度不正确。所以我在 viewDidAppear 中添加了我的 subview ,但是每次 View 出现时 viewDidAppear 都会被调用,这很糟糕。因此,对于我现在的解决方案,我在 viewDidAppear 中添加了我的 subview ,当 View 消失时,我删除了 viewDidDisappear 中的 subview 。有没有另一种方法来实现这个,而无需我手动从 superview 中删除 subview 。

例子

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()
}
}

更新 - 试过这个,但好像它不能在有框架之前添加 subview ?

    @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
}

最佳答案

两个想法:

  1. 如果您使用自动布局来指示 subview 的 frame,那么您可以将它们添加到 viewDidLoad 中,自动布局引擎将负责适当调整它们的大小.

    只需将 subview 的 translatesAutoresizingMaskIntoConstraints 设置为 false,然后添加适当的约束,而不是手动设置 frame 值。

  2. 如果你真的想手动调整框架,你可以在 viewDidLoad 中添加 subview ,然后在 viewWillLayoutSubviews 中调整框架。

关于swift - 在 View Controller 生命周期中的何处添加 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34037463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com