Swift 4.2使用TabBarController

时间:2018-11-01 17:38:09

标签: uiviewcontroller swift4 safearealayoutguide

Further to previous question我以为我已经破解了,但还没有。我想访问safearealayoutguide以在选项卡栏控制器内的屏幕中布局子视图。最初,safeareaguide框架在首次加载时与view.frame相同。我以为诀窍是访问override func viewDidLayoutSubviews(),但这只能在简单的视图控制器中使用,即不能在标签栏控制器中使用VC。仅当我切换到其他屏幕并返回后,安全指南尺寸才会出现。这不理想。有没有办法立即(或在viewDidLoad之后立即)更新安全指南的尺寸?

    override func viewDidLoad() {
    super.viewDidLoad()
    setupView()
    print(view.frame)
}

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    print("ViewWillLayout: \(view.safeAreaLayoutGuide.layoutFrame)")
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(true)
    print("ViewDidAppear \(view.safeAreaLayoutGuide.layoutFrame)")
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    print("ViewDidLayoutSubviews \(view.safeAreaLayoutGuide.layoutFrame)")
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    print("ViewWillAppear \(view.safeAreaLayoutGuide.layoutFrame)")
}

在初始加载时,所有方法均以与view.frame相同的尺寸返回安全指南。

最初:

  • ViewWillLayout:(0.0,0.0,375.0,667.0)
  • ViewDidLayoutSubviews(0.0,0.0,375.0,667.0)
  • ViewWillLayout:(0.0,0.0,375.0,667.0)
  • ViewDidLayoutSubviews(0.0,0.0,375.0,667.0)

在tabbarcontroller中选择另一个VC后返回初始VC:

  • ViewWillLayout:(0.0、64.0、375.0、554.0)
  • ViewDidLayoutSubviews(0.0,64.0,375.0,554.0)
  • ViewDidAppear(0.0,64.0,375.0,554.0)

建议。

我正在使用XCode 10,iOS 11.4,无故事板。

0 个答案:

没有答案