標籤:swift navigation bar
這幾天在項目中遇到的關於navigation bar的一些小問題以及解決的方法記錄一下吧:
1. 完全透明navigation bar
有時候我們想要navigation viewcontroller頂部的navigation bar變得完全透明,我們首先想到是從story board下手,但是嘗試了半天,也不能達到完全透明的效果
選擇這裡的Translucent Navigation Bar只能讓bar變成那種可以稀釋背景色的毛玻璃的效果,那麼究竟應該如何才能把整個navigation bar都變成透明呢?
答案是通過代碼實現:
非常簡單,在viewDidload或者DidAppear中,加入下面3行代碼:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true
自己動手試一下效果吧
2. 改變bar中的backButton或者leftBarButton的樣式
如果我們採用了navigation viewcontroller系列,在我們切換到下一頁面的時候,在bar的最左面會自動出現一個返回的按鈕,這個按鈕的文字預設是上一個頁面的barItem的文字內容,這些都是預設的,會自動幫我們建立。
那有時候會遇到的問題是,如果A頁面的bar Item的文字內容很長,從A頁面push到B頁面後,這個返回按鈕的文字就會很長,從而把B頁面的item內容擠到右側,這樣很不美觀。
這裡我們可以有兩種方式來處理,
1> 我們可以建立一個新的按鈕,並且賦予它文字,樣式等
let backButton = UIBarButtonItem(title: "< Back", style: UIBarButtonItemStyle.Plain, target: self, action: "goBack")navigationItem.leftBarButtonItem = backButtonnavigationItem.leftBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Chalkduster", size: 20)!], forState: UIControlState.Normal)
這樣做的缺點是,你沒有辦法從螢幕的左側向右滑屏實現返回的操作了,而且還必須在goBack的function中自己手動調用navigation的pop方法來達到返回的效果。
2> 或者我們可以來改變這個返回按鈕的樣式,比如手動把它的文字字型大小調整下
let customFont = UIFont(name: "heiti SC", size: 12.0) UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: customFont!], forState: UIControlState.Normal)
注意,因為我們其實是改變的UIBarButtonItem ,所以,這段代碼我們要放到Appdelegate中來實現。這樣,所有的bar中的button類的字型都被強制設定為12號大小了
用swift實現navigation bar的完全透明 & navigation bar中button的字型大小調整