热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

带大标题的UINavigationBar-如何在iOS11中找到额外的高度

如何解决《带大标题的UINavigationBar-如何在iOS11中找到额外的高度》经验,为你挑选了1个好方法。



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


推荐阅读
author-avatar
mobiledu2502875545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有