客製化長相的UINavigationBarController

更新於 2024/06/05閱讀時間約 5 分鐘

上次客製化TabbarController,這次輪到UINavigationController
一言以蔽之,就是用iOS13後出的UINavigationBarAppearance調整

四種場景UI可設定

  1. standardAppearance:用於設置導航欄在標準狀態下的外觀。這通常是默認的外觀配置。
  2. scrollEdgeAppearance:用於設置導航欄在用戶滾動到內容邊緣時的外觀。當用戶滾動到內容的頂部或底部時,這個外觀配置會生效。
  3. compactAppearance:用於設置導航欄在緊湊狀態下的外觀,通常在設備處於橫向模式時生效。
  4. compactScrollEdgeAppearance:用於設置導航欄在緊湊狀態下並且用戶滾動到內容邊緣時的外觀。
這邊我覺得很容易想錯,standardAppearance是指滾動的時候,scrollEdgeAppearance反而才是一開始會看到的(因為預設是頂端)。

原生樣式

原生樣式

原生樣式


  • NavigationBar未滑動時背景是透明的
  • 返回鍵會自動帶入上一頁標題且為藍色
  • 標題黑色且字體大小固定

改變返回鍵&背景顏色&標題顏色大小

改變樣式!!!

改變樣式!!!


class MyNVC: UINavigationController {

override func viewDidLoad() {
        super.viewDidLoad()
        let appearance = UINavigationBarAppearance()
        // 設定標題文字與大小
        appearance.titleTextAttributes = [.foregroundColor: UIColor.white, .font: UIFont.systemFont(ofSize: 20.0, weight: .semibold)]
        // 設定背景顏色
        appearance.backgroundColor = .systemBlue

        
        // 設定返回鍵normal狀態
        let a = UIBarButtonItemAppearance()
        let buttonItemAppearance = UIBarButtonItemAppearance()
        let normal = buttonItemAppearance.normal

        // 不顯示上一頁title(設成透明)
        normal.titleTextAttributes = [.foregroundColor: UIColor.clear]
        // 設定使用自己的圖片
        normal.backgroundImage = UIImage(named: "back")
        appearance.backButtonAppearance = buttonItemAppearance

        navigationBar.standardAppearance = appearance
        navigationBar.scrollEdgeAppearance = appearance

    }
}

我的做法是先subclass一個NVC,並在viewdidload時去設定他的appearance。

底部陰影

NG作法

// 會變一條實心的線
appearance.shadowColor = .gray
實心線

實心線

有效做法

// 用圖的方式放上去
appearance.shadowImage = UIImage(named: "shadow")
陰影

陰影

StackOverFlow上也有人是用程式動態渲染出陰影圖片再放,或在navigationBar的layer上加,可是都比較麻煩,最好就是請設計單獨出一張陰影線的圖片XD


用UINavigationBarAppearance的優點

  • 可以客製化的地方很多: 太多了反而覺得有點頭昏😵‍💫 裡面還有很多我沒用到的。
  • 客製化返回鍵UI又保留返回手勢

以前我們專案有另一種做法是去subclass VC,在viewdidLoad時把最左按鈕改成自定義的,缺點是會喪失掉原生的返回手勢,變成只能點擊按鈕返回,對使用者比較難用。

NG作法(不好用!)

class MyVC: UIViewController {
  override func viewDidLoad() {
        super.viewDidLoad()
        let goBackBtn = UIBarButtonItem(image: UIImage(named: "back"), style: .plain, target: self, action: #selector(goBack))
        self.navigationItem.leftBarButtonItem = goBackBtn
}

@objc func goBack() {
        self.navigationController?.popViewController(animated: true)
    }
}








avatar-img
7會員
35內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Michelle Chen的沙龍 的其他內容
這篇文章介紹了 Swift 中字串的比較方法,並討論了使用日期字串進行比較的結果。同時也介紹了數字字串、符號字串和表情符號字串的比較原理。最後指出比較日期字串還是要轉成Date才是安全的做法。
最近碰到個神奇的需求,App啟動時,才要用firebase remoteConfig去決定初始畫面。該文章詳細介紹了在App啟動時如何利用firebase remoteConfig去決定初始畫面,以及解決在推播的情況下造成跳轉無效的問題。
這篇文章主要討論了在 iOS 開發中,使用 UIImagePickerController 來選取 GIF 圖片時會變成靜態截圖的問題,並推薦了使用新的 PHPickerViewController 選取 GIF 檔案。同時提供了一些處理 GIF 圖片的方法。
這篇文章介紹了 iOS 中常用的 Design Patterns,包括 MVC、MVVM、Singleton、Delegation、Observer 等。同時比較了 Delegate 和 Notification 的使用時機。參考資料中還有更多相關資訊。
本文紀錄了MVC和MVVM的差異,包括各自的優缺點和最大差異,並討論了MVVM的商業邏輯應該寫在哪的問題。
在寫SwiftUI view的時候,碰到一個瓶頸(? 帶有Binding的參數要如何preview。 舉例來說有個右邊圖片左邊文字的View,給他一個@Binding var isActive: Bool的狀態,當active時圖片要跟著改變: struct RightImageView: Vie
這篇文章介紹了 Swift 中字串的比較方法,並討論了使用日期字串進行比較的結果。同時也介紹了數字字串、符號字串和表情符號字串的比較原理。最後指出比較日期字串還是要轉成Date才是安全的做法。
最近碰到個神奇的需求,App啟動時,才要用firebase remoteConfig去決定初始畫面。該文章詳細介紹了在App啟動時如何利用firebase remoteConfig去決定初始畫面,以及解決在推播的情況下造成跳轉無效的問題。
這篇文章主要討論了在 iOS 開發中,使用 UIImagePickerController 來選取 GIF 圖片時會變成靜態截圖的問題,並推薦了使用新的 PHPickerViewController 選取 GIF 檔案。同時提供了一些處理 GIF 圖片的方法。
這篇文章介紹了 iOS 中常用的 Design Patterns,包括 MVC、MVVM、Singleton、Delegation、Observer 等。同時比較了 Delegate 和 Notification 的使用時機。參考資料中還有更多相關資訊。
本文紀錄了MVC和MVVM的差異,包括各自的優缺點和最大差異,並討論了MVVM的商業邏輯應該寫在哪的問題。
在寫SwiftUI view的時候,碰到一個瓶頸(? 帶有Binding的參數要如何preview。 舉例來說有個右邊圖片左邊文字的View,給他一個@Binding var isActive: Bool的狀態,當active時圖片要跟著改變: struct RightImageView: Vie
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
🔗https://edjump.pse.is/54meaw 今天的來賓劉柏楊TK,為TKS FULL HOUSE 提克斯國際餐飲的創始人,他在高雄從事餐飲業已經超過11年。TK提供我們關於餐飲業競爭性質的見解,以及從酒吧業務開始轉型經營成功的外送公司的個人經歷。
Thumbnail
您是學生或公司行號正在為團服或公司制服所煩惱嗎?幾何學幫您整理了關於客製化團服、公司制服或團體服設計與材質,還有最重要的價格估算,讓您對於客製化團體服有更全面的認識,快來看看幾何學精心撰寫的內容吧! 客製化衣服怎麼製作?衣服設計流程大公開! https://www.geometrytaiwan.co
Thumbnail
記得先點+追蹤喔❤️ 【復刻未來・AI 海洋名畫特展】 活動期間:2022/10/5 ~ 2023/3/31 票價資訊:Xpark 門票
Thumbnail
生之花系列。歡迎光臨,大家好久不見的客製畫分享回來了~一起見繁花從中央盛放,看那蝶在荷中翩翩起舞,散播芬芳!
Thumbnail
BACKBONE之所以能成為客製化人體工學椅的第一品牌,真的在許多細節上都相當用心。無論是椅款的樣式、門市人員的專業度,都相當不錯!透過近卅年的歐美代工經驗,讓台灣的團隊養成了堅強的產品研發實力,進而創造出許多個人化的人體工學周邊產品,造福消費者
Thumbnail
近來好嗎?感謝老天為我們下了場雨,即時讓這週的各地水庫有進帳。 您好,這是一則每週日晚上都會為您親自撰寫的一封信,來自銀色大門的一封信。 在這封信裡,您能夠知道銀色大門在成長、服務長輩等面向的細節, 為的就是邀請您可以一起參與服務長輩和創造台灣銀髮產業革命!
Thumbnail
台灣有許多店家取名都有它必然與因緣際會而成為這家店的名字。長春二號飯盒專賣店就是如此店家,該店家靠近中山捷運站附近,地址在台北市中山區長春路二號,因為門牌地址就取了這個長春二號店名。 長春二號相關資訊:: 地址: 台北市中山區長春路2號 電話: 02 2581 5508 營業時間:
Thumbnail
   今天要分享給大家的這幅作品,是我們在紐約的布魯克林大橋上創作的,所以我們在背景加上了當時的景色,給畫中的情侶留下一份獨特的回憶.   今天我們要介紹的就是這畫中的背景,在紐約的布魯克林大橋.
Thumbnail
人生事業 愛情皆轉轉轉!http://www.6995.com.tw哈哈哈哈哈!轉運了!邱允文和邱吉爾在生日禮物結婚禮物客製化商品-天藏地酒1月25日上午2:25 · 台中市 · 「邱允文」的圖片搜尋結果邱允文和邱吉爾在生日禮物結婚禮物客製化商品-天藏地酒邱允文 阿拉丁創客團隊 免費
Thumbnail
邱允文– 阿拉丁瓶雕刻生日禮物結婚禮物國立臺中科技大學 ...2019年5月23日 - 邱允文國立臺中科技大學『回憶只會越來越淡,直至它已烙印在你心深處。 ... 天貓商行酒瓶雕刻生日禮物結婚禮物台中客製化商品- YouTube客製化商品台中- 邱允文阿拉丁創客團隊  http://www.6995
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
🔗https://edjump.pse.is/54meaw 今天的來賓劉柏楊TK,為TKS FULL HOUSE 提克斯國際餐飲的創始人,他在高雄從事餐飲業已經超過11年。TK提供我們關於餐飲業競爭性質的見解,以及從酒吧業務開始轉型經營成功的外送公司的個人經歷。
Thumbnail
您是學生或公司行號正在為團服或公司制服所煩惱嗎?幾何學幫您整理了關於客製化團服、公司制服或團體服設計與材質,還有最重要的價格估算,讓您對於客製化團體服有更全面的認識,快來看看幾何學精心撰寫的內容吧! 客製化衣服怎麼製作?衣服設計流程大公開! https://www.geometrytaiwan.co
Thumbnail
記得先點+追蹤喔❤️ 【復刻未來・AI 海洋名畫特展】 活動期間:2022/10/5 ~ 2023/3/31 票價資訊:Xpark 門票
Thumbnail
生之花系列。歡迎光臨,大家好久不見的客製畫分享回來了~一起見繁花從中央盛放,看那蝶在荷中翩翩起舞,散播芬芳!
Thumbnail
BACKBONE之所以能成為客製化人體工學椅的第一品牌,真的在許多細節上都相當用心。無論是椅款的樣式、門市人員的專業度,都相當不錯!透過近卅年的歐美代工經驗,讓台灣的團隊養成了堅強的產品研發實力,進而創造出許多個人化的人體工學周邊產品,造福消費者
Thumbnail
近來好嗎?感謝老天為我們下了場雨,即時讓這週的各地水庫有進帳。 您好,這是一則每週日晚上都會為您親自撰寫的一封信,來自銀色大門的一封信。 在這封信裡,您能夠知道銀色大門在成長、服務長輩等面向的細節, 為的就是邀請您可以一起參與服務長輩和創造台灣銀髮產業革命!
Thumbnail
台灣有許多店家取名都有它必然與因緣際會而成為這家店的名字。長春二號飯盒專賣店就是如此店家,該店家靠近中山捷運站附近,地址在台北市中山區長春路二號,因為門牌地址就取了這個長春二號店名。 長春二號相關資訊:: 地址: 台北市中山區長春路2號 電話: 02 2581 5508 營業時間:
Thumbnail
   今天要分享給大家的這幅作品,是我們在紐約的布魯克林大橋上創作的,所以我們在背景加上了當時的景色,給畫中的情侶留下一份獨特的回憶.   今天我們要介紹的就是這畫中的背景,在紐約的布魯克林大橋.
Thumbnail
人生事業 愛情皆轉轉轉!http://www.6995.com.tw哈哈哈哈哈!轉運了!邱允文和邱吉爾在生日禮物結婚禮物客製化商品-天藏地酒1月25日上午2:25 · 台中市 · 「邱允文」的圖片搜尋結果邱允文和邱吉爾在生日禮物結婚禮物客製化商品-天藏地酒邱允文 阿拉丁創客團隊 免費
Thumbnail
邱允文– 阿拉丁瓶雕刻生日禮物結婚禮物國立臺中科技大學 ...2019年5月23日 - 邱允文國立臺中科技大學『回憶只會越來越淡,直至它已烙印在你心深處。 ... 天貓商行酒瓶雕刻生日禮物結婚禮物台中客製化商品- YouTube客製化商品台中- 邱允文阿拉丁創客團隊  http://www.6995