作者:mobiledu2502875545 | 来源:互联网 | 2023-01-12 14:31
1> Kamil Szosta..:
我想你找不到明确解决问题的方法.您要求的是导航栏内部的一部分,不向用户公开.但是,我想我可以为你提供一个解决方法.
要理解这一点,我们来看看视图调试器中的导航栏(启用了大型标题).正如您在下图所示,有一个额外的视图,包含特定视图控制器的大标题.如果不支持大型标题,则此视图不存在.
基本上,你想知道的是那个视图的高度.
这是我提出的解决方案/解决方法
extension UINavigationBar
{
var largeTitleHeight: CGFloat {
let maxSize = self.subviews
.filter { $0.frame.origin.y > 0 }
.max { $0.frame.origin.y <$1.frame.origin.y }
.map { $0.frame.size }
return maxSize?.height ?? 0
}
}
它能做什么
过滤掉从导航栏顶部开始的子视图.它们很可能是背景或导航区域,我们不需要它们.
在导航栏中找到最低的子视图.
将生成的子视图帧映射到帧大小.
返回找到的子视图的高度,如果没有找到,则返回0.
这种方法的明显缺点是它与导航条的结构紧密耦合,可能在将来发生变化.但是,你不太可能获得超过一个或另一个肮脏的技巧.
执行结果应如下所示.
print("Extra height: \(navigationController!.navigationBar.lagreTitleHeight)")
Extra height: 52.0