我有一个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,但是我不确定这是否可以解决问题。
答案 0 :(得分:0)
我想在viewDidLoad()中调用setupViews(),但此时尚未设置navigationController的navigationBar。因此,我在viewDidAppear中调用setupViews,这是不希望的,因为每次ViewController出现时都会重新加载视图。
好吧,很明显,您可以通过使用Bool实例属性来解决 问题,以便仅在调用viewDidAppear
的第一次 时执行此操作。但是我质疑您的假设,即您首先需要将某些内容锚定到导航控制器的导航栏上。锚定到安全区域的顶部。那就是它的目的。