NavigationBar中添加自定义控件

场景:UIViewController
条件:ViewController(下简称VC)嵌在NavigationController(下简称NC)中(也就是最常见的使用方法)

let 自定义控件 = 自定义控件类()
自定义控件.translatesAutoresizingMaskIntoConstraints = true  //这里用frame比用约束简单得多
自定义控件.frame = CGRect(x: 0, y: 0, width: 100, height: 44)  //height最好不要超过44
navigationItem.titleView = 自定义控件  //navigationBar会自动设置自定义控件的水平和垂直居中

对于这种嵌在NC中的VC,多个VC共用NCNavigationBar(注意,VC自己默认是不带NavigationBar的),在NC执行pushpop操作时,会调用将要显示的VCnavigationItem属性,将其内容填入NavigationBar,这里就是利用这个机制修改NavigationBar的内容的。
titleView就是NavigationBar显示标题的位置,默认值为空。当其为空时,NavigationBar会根据title属性是否存在,在此处添加文字或什么都不添加;当其不为空时,无论title是否存在,NavigationBar都会在此处添加一个自定义控件。
注意不要试图用navigationController?.navigationBar.addSubview(自定义控件)这种方法添加自定义控件,除非你想这个控件一直保留在NavigationBar上,因为这个控件不会随navigationItem改变,除非你调用navigationController?.navigationBar.removeSubview(自定义控件)

20171020更新

升级到iOS11后,titleView的尺寸需要用Auto Layout控制,为titleView加上widthheight约束即可,不需要添加位置约束。需要注意的是,要区分iOS版本,分别设置,即iOS10即以下设置frame,iOS11设置约束。

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

相关阅读更多精彩内容

友情链接更多精彩内容