NavigationBar里的ModernPromptView

ModernPromptView 是啥在哪?

我们都知道在导航栏里都有个title的标题,这个标题是通过导航栏里的当前的ViewController的实例来设置的。
self.title = "标题"

这样是没有用滴: navigationController?.navigationItem.title = "标题"

那么是否注意过,有的app在title的上面偶尔也会出现一串小的字符提示呢?


IMG_1884.jpg

屏幕快照 2018-07-14 11.35.05.png

确实有唉!这样的设计还有些小清新呢,但是这个事个什么鬼东西呢?沃日··· 不会是整个导航栏都是完全自定义的吧!就为了个提示语?

当然不了,这就是传说中的ModernPromptView是NavigationBar自带的,全名是UINavigationBarModernPromptView。(中文名咋叫呢,打开谷歌翻译 → 摩登提示视图 沃日···🙃 这么难叫又不朗朗上口,叫出来会被笑话的吧 )


xChange.jpg
屏幕快照_2018-07-14_11_35_05.png

这鸡儿多高呢,Reveal展示 在 iOS 9 上为30, iOS 11 上为34,


屏幕快照 2018-07-14 14.50.38.png

ModernPromptView上面有个Label,来展示内容的。如果你不赋值的话,那么这个view是不会显示的,也不会让NavigationBar变高。

赋值:navigationItem.prompt = "完毕"

这个label的字体和颜色是可以修改的(如果你不嫌麻烦的去像下面这样的取)但字体大小会被 摩登提示视图🤣 的高度限制,对了不特殊设置的话,字体颜色为黑色。很丑

let barsubViews = navigationController?.navigationBar.subviews;
        for subView in barsubViews! {
            let Anyclass = object_getClass(subView)
            let classStr = String(describing: Anyclass!)
            if classStr == "_UINavigationBarModernPromptView"
            {
                let promptLabel = subView.subviews[0] as! UILabel
                promptLabel.textColor = UIColor.white
                promptLabel.font = UIFont.systemFont(ofSize: 16)
            }
        }

我在本示例中 将它用于网络加载的提示,通过控制计时器的不断赋值,来实现Load· 、Load·· 、 Load···。但是实际效果并不好看。


多说一句 Reveal都打开了当然顺便贴一下NavigationBar视图的内部视图了

屏幕快照 2018-07-14 15.29.57.png

很明显NavigationBar的一级子视图有三个(这里没有设置iOS11才有的largeTitle)

  1. UIBarBackGround frame:(0, -20, ScreenWidth, 98) 98就是 20 + 34(在iOS 9 中是30)+ 44 整个导航栏和状态栏的高度。


    屏幕快照 2018-07-14 15.35.04.png
  1. UINavigationBarContentView frame:(0, 34, ScreenWidth, 44) 此视图内部很复杂,本文不做展开讨论了。


    屏幕快照 2018-07-14 15.43.48.png
  1. UINavigationBarModernPromptView frame(0, 0, ScreenWidth, 34) 摩登提示视图🤣 内部很简单只有一个Label来展示文字


    屏幕快照 2018-07-14 15.45.55.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容