客製化長相的UINavigationBarController

更新於 發佈於 閱讀時間約 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
留言分享你的想法!
avatar-img
Michelle Chen的沙龍
8會員
34內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
Michelle Chen的沙龍的其他內容
2024/09/06
本文介紹了使用KeyboardLayoutGuide的方法,以及在不同iOS版本和設備上遇到的佈局問題。透過調整TextView的底部對齊方式,成功解決了在模擬器和真實設備上出現的錯誤,提供了有用的建議給開發者。本文還探討了為何在iOS15與Xib的組合使用中會出現問題,以及解決方案。
Thumbnail
2024/09/06
本文介紹了使用KeyboardLayoutGuide的方法,以及在不同iOS版本和設備上遇到的佈局問題。透過調整TextView的底部對齊方式,成功解決了在模擬器和真實設備上出現的錯誤,提供了有用的建議給開發者。本文還探討了為何在iOS15與Xib的組合使用中會出現問題,以及解決方案。
Thumbnail
2024/08/07
使用者回報的超級奇怪線上問題,用數字鍵盤(NumberPad)更改欄位時,送出後尾數都會消失。例如:30 ⭢ 3,52 ⭢ 5。 尋尋覓覓了兩天終於被我找到這篇,apple的奇葩的bug 重現條件 iOS17 手機設定是繁體中文語系 前一個用過的鍵盤是Cangjie倉頡 or Suchen
2024/08/07
使用者回報的超級奇怪線上問題,用數字鍵盤(NumberPad)更改欄位時,送出後尾數都會消失。例如:30 ⭢ 3,52 ⭢ 5。 尋尋覓覓了兩天終於被我找到這篇,apple的奇葩的bug 重現條件 iOS17 手機設定是繁體中文語系 前一個用過的鍵盤是Cangjie倉頡 or Suchen
2024/07/03
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
2024/07/03
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
這次的side bar不一樣了,上一次我好像做的太簡單了,所以完讀率只有14%,我好難過啊(;´д`)ゞ,所以我這準備的內容有多一點。 這次的目標 按鈕的排版 按鈕滑過去會有顏色變化 Side bar能夠展開 箭頭能夠移動至被選擇的物件上 宣告 這次我創了兩個檔案 SideBa
Thumbnail
這次的side bar不一樣了,上一次我好像做的太簡單了,所以完讀率只有14%,我好難過啊(;´д`)ゞ,所以我這準備的內容有多一點。 這次的目標 按鈕的排版 按鈕滑過去會有顏色變化 Side bar能夠展開 箭頭能夠移動至被選擇的物件上 宣告 這次我創了兩個檔案 SideBa
Thumbnail
iOS 17.5 正式版上架更新日預測| iPhone 早前在4月初發表了開發者測試版 iOS 17.5 Beta , 為手機帶來很多新功能及細節改良, 那一般用戶幾時才可以正式用到 iOS 17.5 ?當中又有甚麼吸引、實用新功能呢? 「天氣」桌面工具 iOS 17.5 微調了桌
Thumbnail
iOS 17.5 正式版上架更新日預測| iPhone 早前在4月初發表了開發者測試版 iOS 17.5 Beta , 為手機帶來很多新功能及細節改良, 那一般用戶幾時才可以正式用到 iOS 17.5 ?當中又有甚麼吸引、實用新功能呢? 「天氣」桌面工具 iOS 17.5 微調了桌
Thumbnail
很多 Apple 用戶都很喜歡透過內建備忘錄App來筆記, 要是不小心在 iOS 或 iPadOS 備忘錄內紀錄不見、寫錯字或打錯字,要怎麼替 iPad 或 iPhone 備忘錄還原上一步呢? 要是不小心在備忘錄內消失紀錄, 可以利用本篇分享的四招 iPad iPhone備忘錄還原上一步技
Thumbnail
很多 Apple 用戶都很喜歡透過內建備忘錄App來筆記, 要是不小心在 iOS 或 iPadOS 備忘錄內紀錄不見、寫錯字或打錯字,要怎麼替 iPad 或 iPhone 備忘錄還原上一步呢? 要是不小心在備忘錄內消失紀錄, 可以利用本篇分享的四招 iPad iPhone備忘錄還原上一步技
Thumbnail
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
這篇文章教你如何製作側邊欄,包括準備工作、HTML和CSS的部分,還有一些互動效果。文章涵蓋了連結、圖片、超連結、大小、顏色、排版、flex和滑鼠互動等內容。
Thumbnail
這篇文章教你如何製作側邊欄,包括準備工作、HTML和CSS的部分,還有一些互動效果。文章涵蓋了連結、圖片、超連結、大小、顏色、排版、flex和滑鼠互動等內容。
Thumbnail
iPhone 最新作業系統 iOS 18 控制中心大更新,預設有常用功能、音樂播放器、連線控制三個頁面,並允許使用者自訂頁面,可以直接在控制中心管理所需的功能、調整位置和選擇尺寸。
Thumbnail
iPhone 最新作業系統 iOS 18 控制中心大更新,預設有常用功能、音樂播放器、連線控制三個頁面,並允許使用者自訂頁面,可以直接在控制中心管理所需的功能、調整位置和選擇尺寸。
Thumbnail
本文介紹如何使用UINavigationBarAppearance調整四種場景下的UI外觀,並探討客製化返回鍵UI又保留返回手勢的做法,可以有效地客製化NavigationBar的外觀,並避免一些NG作法。
Thumbnail
本文介紹如何使用UINavigationBarAppearance調整四種場景下的UI外觀,並探討客製化返回鍵UI又保留返回手勢的做法,可以有效地客製化NavigationBar的外觀,並避免一些NG作法。
Thumbnail
雖然我之前文章大力讚美SwiftUI的tabView有多好用,無奈專案大部分都是UIKit啊~~~~要在既有專案用Tab架構只能用UITabBarController了 設計這次還出了一個超複雜的UI,陰影+圓角+客製化高度 大套餐 馬上開始吧。 圓角+陰影 重點就是subclass一個
Thumbnail
雖然我之前文章大力讚美SwiftUI的tabView有多好用,無奈專案大部分都是UIKit啊~~~~要在既有專案用Tab架構只能用UITabBarController了 設計這次還出了一個超複雜的UI,陰影+圓角+客製化高度 大套餐 馬上開始吧。 圓角+陰影 重點就是subclass一個
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News