【问题标题】:How to set views once after viewdidload or navigationBar is set?设置 viewdidload 或 navigationBar 后如何设置视图一次?
【发布时间】:2019-02-16 02:18:24
【问题描述】:

我有一个视图控制器,它被导航控制器推入堆栈。在这个 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 创建一个可选的 navigationBar 并在其中调用 setupViews,但我不确定这是否能解决问题。

【问题讨论】:

    标签: ios swift uinavigationcontroller uinavigationbar


    【解决方案1】:

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

    好吧,显然您可以通过使用 Bool 实例属性来解决 那个 问题,这样您只需在调用viewDidAppear第一次 执行此操作。但我质疑您的假设,即您首先需要将某些内容锚定到导航控制器的导航栏。锚定到安全区域的顶部。这就是它的用途。

    【讨论】:

      猜你喜欢
      • 2019-03-30
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多