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會自動設(shè)置自定義控件的水平和垂直居中

對于這種嵌在NC中的VC,多個VC共用NCNavigationBar(注意,VC自己默認(rèn)是不帶NavigationBar的),在NC執(zhí)行pushpop操作時,會調(diào)用將要顯示的VCnavigationItem屬性,將其內(nèi)容填入NavigationBar,這里就是利用這個機(jī)制修改NavigationBar的內(nèi)容的。
titleView就是NavigationBar顯示標(biāo)題的位置,默認(rèn)值為空。當(dāng)其為空時,NavigationBar會根據(jù)title屬性是否存在,在此處添加文字或什么都不添加;當(dāng)其不為空時,無論title是否存在,NavigationBar都會在此處添加一個自定義控件。
注意不要試圖用navigationController?.navigationBar.addSubview(自定義控件)這種方法添加自定義控件,除非你想這個控件一直保留在NavigationBar上,因為這個控件不會隨navigationItem改變,除非你調(diào)用navigationController?.navigationBar.removeSubview(自定義控件)。

20171020更新

升級到iOS11后,titleView的尺寸需要用Auto Layout控制,為titleView加上widthheight約束即可,不需要添加位置約束。需要注意的是,要區(qū)分iOS版本,分別設(shè)置,即iOS10即以下設(shè)置frame,iOS11設(shè)置約束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容