繁体   English   中英

如何检测 UITabBarController 中的选项卡数量何时随方向发生变化?

[英]How do I detect when the number of tabs changes on orientation in UITabBarController?

在 iPhone 13 pro max 上,纵向显示 5 个标签,横向显示 8 个标签。

我想检测标签数量何时发生变化(例如:8 到 5 或 5 到 8)。

有时,新选项卡在 deviceOrientationDidChange 之后呈现,其中tabBar.items?.count仍然指向旧值。

一种解决方案是覆盖viewDidLayoutSubviews

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    print("didLayout:", self.tabBar.items!.count)
}

该代码假定self是一个扩展UITabBarController的 class。

此解决方案的一个问题是,当设备旋转时, viewDidLayoutSubviews可能会被调用不止一次(可能两次),因此您必须调整逻辑来处理此问题。


另一种可能的解决方案是覆盖viewWillTransition

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    coordinator.animate(alongsideTransition: nil) { context in
        print("didTransition:", self.tabBar.items!.count)
    }
}

尾随闭包是一个完成块,在旋转 animation 完成后调用。

此解决方案的一个问题是它最初未被调用。 它仅在设备旋转或拆分视图模式更改后调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM