设置viewdidload或navigationBar后如何设置一次视图?
How to set views once after viewdidload or navigationBar is set?
我有一个 viewController 被 navigationController 推入堆栈。在这个 viewController 中,我有一个名为 setupViews 的函数,它将我的 UI 元素添加到视图中,并根据导航栏的 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 出现时视图都会重新加载。
在设置导航栏后,是否有一个我可以调用 setupViews 的函数只运行一次?我正在考虑创建一个带有 didSet 的可选导航栏并在其中调用 setupViews,但我不确定这是否能解决问题。
I want to call setupViews() in viewDidLoad() but at this point, the navigationController's navigationBar is not set. So I'm calling setupViews in viewDidAppear which is undesirable since the views reload every time the ViewController appears.
好吧,显然你可以通过使用 Bool 实例 属性 来解决 那个 问题,这样你只需要在 first 时间 viewDidAppear
被调用。但我质疑您的假设,即您首先需要将某些内容锚定到导航控制器的导航栏。锚定到 安全区域 的顶部。这就是它的用途。
我有一个 viewController 被 navigationController 推入堆栈。在这个 viewController 中,我有一个名为 setupViews 的函数,它将我的 UI 元素添加到视图中,并根据导航栏的 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 出现时视图都会重新加载。
在设置导航栏后,是否有一个我可以调用 setupViews 的函数只运行一次?我正在考虑创建一个带有 didSet 的可选导航栏并在其中调用 setupViews,但我不确定这是否能解决问题。
I want to call setupViews() in viewDidLoad() but at this point, the navigationController's navigationBar is not set. So I'm calling setupViews in viewDidAppear which is undesirable since the views reload every time the ViewController appears.
好吧,显然你可以通过使用 Bool 实例 属性 来解决 那个 问题,这样你只需要在 first 时间 viewDidAppear
被调用。但我质疑您的假设,即您首先需要将某些内容锚定到导航控制器的导航栏。锚定到 安全区域 的顶部。这就是它的用途。