如何在设置viewdidload或导航栏后设置视图?

问题描述 投票:0回答:1

我有一个viewController,它被一个navigationController压入堆栈。在这个viewController中,我有一个名为setupViews的函数,它将我的UI元素添加到视图中,并根据navigationBar的bottomAnchor来锚定它们。

例:

func setupViews() {
    view.addSubview(topBar)
    topBar.anchor(top: navigationController?.navigationBar.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 1, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 55)
}

我想在viewDidLoad()中调用setupViews(),但此时,没有设置navigationController的navigationBar。所以我在viewDidAppear中调用setupViews,这是不受欢迎的,因为每次ViewController出现时都会重新加载视图。

在设置navigationBar之后,是否有一个我可以调用setupViews的函数只运行一次?我正在考虑使用didSet创建一个navigationBar可选项并在其中调用setupViews,但我不确定这是否能解决问题。

ios swift uinavigationcontroller uinavigationbar
1个回答
0
投票

我想在viewDidLoad()中调用setupViews(),但此时,没有设置navigationController的navigationBar。所以我在viewDidAppear中调用setupViews,这是不受欢迎的,因为每次ViewController出现时都会重新加载视图。

好吧,显然你可以通过使用Bool实例属性来解决这个问题,这样你只能在第一次调用viewDidAppear时才这样做。但我质疑你的假设,你需要首先将某些东西锚定到导航控制器的导航栏。锚定在安全区域的顶部。这就是它的用途。

© www.soinside.com 2019 - 2024. All rights reserved.