gpt4 book ai didi

ios - 获取大标题导航栏的默认收缩高度和展开高度

转载 作者:行者123 更新时间:2023-12-05 04:55:12 25 4
gpt4 key购买 nike

我为导航栏启用了大标题:

navigationController?.navigationBar.prefersLargeTitles = true

这使得导航栏以展开的高度开始,并随着用户向下滚动而缩小。

现在,我想在导航栏内添加一个 subview ,它会根据导航栏的高度调整大小。为此,我需要获取导航栏的最大和最小高度,这样我就可以计算出它扩展了多少。

我可以这样获取导航栏的当前高度:

guard let height = navigationController?.navigationBar.frame.height else { return }
print("Navigation height: \(height)")

我在里面调用这个 scrollViewDidScroll ,当我滚动时,似乎扩展高度约为 96,收缩高度约为 44。但是,我不想对值进行硬编码。

苹果手机 12

<表类="s-表"><头>扩展 (96.33)缩小 (44)<正文> enter image description here enter image description here

苹果手机 8

<表类="s-表"><头>扩展 (96.5)缩小 (44)<正文> enter image description here enter image description here

我也只能在用户实际上下滚动时获取这些值,这在生产中不起作用。即使我强制用户滚动,也为时已晚,因为我需要提前知道两个高度,这样我才能插入调整大小的 subview 。

<表类="s-表"><头>我想获取这些值,但不需要硬编码或滚动<正文>

有什么方法可以同时获得缩小和展开的导航栏的高度?

最佳答案

一年后遇到了我自己的问题。另一个答案没有用,所以我使用了 View 层次结构。

View Hierarchy with '_UINavigationBarContentView" selected

看起来缩小的外观嵌入了一个名为_UINavigationBarContentView的类。由于这是一个私有(private)类,我不能直接访问它。但是,它的 y 原点是 0 并且它里面有一个 UILabel。这就是我需要知道的一切!

extension UINavigationBar {
func getCompactHeight() -> CGFloat {

/// Loop through the navigation bar's subviews.
for subview in subviews {

/// Check if the subview is pinned to the top (compact bar) and contains a title label
if subview.frame.origin.y == 0 && subview.subviews.contains(where: { $0 is UILabel }) {
return subview.bounds.height
}
}

return 0
}
}

用法:

override func viewDidLoad() {
super.viewDidLoad()

self.title = "Navigation"

if
let navigationBar = navigationController?.navigationBar,
let window = UIApplication.shared.keyWindow
{
navigationBar.prefersLargeTitles = true /// Enable large titles.

let compactHeight = navigationBar.getCompactHeight() // 44 on iPhone 11
let statusBarHeight = window.safeAreaInsets.top // 44 on iPhone 11
let navigationBarHeight = compactHeight + statusBarHeight
print(navigationBarHeight) // Result: 88.0
}
}

这个答案的缺点是,如果 Apple 更改了 UINavigationBar 的内部结构,它可能无法工作。不过对我来说已经足够好了。

关于ios - 获取大标题导航栏的默认收缩高度和展开高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65527339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com