UIKit navigation bar 的 back 按鈕設定

  • 預設的 back 按鈕文字
  • 設定 back 按鈕的顏色
  • 設定 back 按鈕的文字
  • 隱藏 back 按鈕的文字
  • 設定 back 按鈕的圖案

預設的 back 按鈕文字

  • 當前一頁的 navigation bar 沒有標題時。

back 按鈕顯示 Back。App 若有設定中文版,在中文介面的 iOS 將顯示返回。

ps: 專案的 Localization 有加入 Chinese, Traditional 才代表 App 有設定中文版。

  • 當前一頁的 navigation bar 有標題時。

back 按鈕將顯示前一頁 navigation bar 的標題。

設定 back 按鈕的顏色

  • 方法1: 設定 asset 的 AccentColor。

iOS 14 以上版本限定,套用到所有的 back button。

  • 方法2: 設定 Global Tint

點選 storyboard 裡的任一元件,從 File inspector 設定 Global Tint,套用到所有的 back button。

  • 方法3: 設定 navigation bar 的 Tint Color

設定 navigation bar 的 Tint Color,套用到 navigation bar 上的 back button。

從程式設定的方法如下。

navigationController?.navigationBar.tintColor = .orange

以下寫法則可套用到所有的 back button。

UINavigationBar.appearance().tintColor = .orange
  • 方法4: 設定 titleTextAttributes

套用到 navigation bar 上的 back button。

let barAppearance =  UINavigationBarAppearance()
let buttonAppearance = UIBarButtonItemAppearance(style: .plain)
buttonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.systemOrange]
barAppearance.backButtonAppearance = buttonAppearance
navigationController?.navigationBar.standardAppearance = barAppearance
navigationController?.navigationBar.scrollEdgeAppearance = barAppearance

ps: 若將 navigationController?.navigationBar 改成 UINavigationBar.appearance(),將套用到所有的 back button。

UINavigationBar.appearance().standardAppearance = barAppearance
UINavigationBar.appearance().scrollEdgeAppearance = barAppearance

值得注意的,此方法只會修改文字顏色,< 的顏色並沒有改變。若要修改 < 的顏色,還是要用前面提到的三個方法。

設定 back 按鈕的文字

在前一頁的 view controller 設定 navigationItem.backButtonTitle。

以下圖為例,我們想將尼羅河謀殺案頁面的 back 按鈕從河上謀殺案改成回到前一頁。我們必須在前一頁的 view controller 設定 navigationItem.backButtonTitle。

  • 方法 1: 從 Interface Builder 設定

點選上圖紅色框框 controller 裡的 navigation Item。

在 Back Button 的欄位輸入 back 按鈕的文字。

  • 方法 2: 從程式設定

假設前一頁的 view controller 類別為 ViewController。

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

navigationItem.backButtonTitle = "回到前一頁"
}
}

隱藏 back 按鈕的文字

在前一頁的 view controller 設定 navigationItem.backButtonTitle。

以下圖為例,我們希望尼羅河謀殺案頁面的 back 按鈕只有 <,沒有文字。因此我們必須在前一頁的 view controller 設定 navigationItem.backButtonTitle。

  • 方法 1: 從 Interface Builder 設定

點選上圖紅色框框 controller 裡的 navigation Item。

在 Back Button 輸入一個空白後按 enter。

  • 方法 2: 從程式設定

假設前一頁的 view controller 類別為 ViewController。

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

navigationItem.backButtonTitle = ""
}
}

將 backButtonTitle 設成空字串,讓 back 按鈕不再顯示文字。

設定 back 按鈕的圖片

  • iOS 13 以上版本

呼叫 setBackIndicatorImage(_:transitionMaskImage:),傳入 back 按鈕的圖片。

let barAppearance =  UINavigationBarAppearance()
let backButtonBackgroundImage = UIImage(systemName: "list.bullet")
barAppearance.setBackIndicatorImage(backButtonBackgroundImage, transitionMaskImage: backButtonBackgroundImage)
navigationController?.navigationBar.standardAppearance = barAppearance
navigationController?.navigationBar.scrollEdgeAppearance = barAppearance

ps: 若將 navigationController?.navigationBar 改成 UINavigationBar.appearance(),將套用到所有的 back button。

UINavigationBar.appearance().standardAppearance = barAppearance
UINavigationBar.appearance().scrollEdgeAppearance = barAppearance

除了使用 SF Symbol,我們也可以使用 asset 的圖片。建議採用適當大小的單色圖片,若是圖片太大將造成可怕的排版問題。

let barAppearance =  UINavigationBarAppearance()
let backButtonBackgroundImage = UIImage(named: "peter")
barAppearance.setBackIndicatorImage(backButtonBackgroundImage, transitionMaskImage: backButtonBackgroundImage)
  • iOS 13 之前的版本
let backButtonBackgroundImage = UIImage(systemName: "list.bullet")
let barAppearance = UINavigationBar.appearance()
barAppearance.backIndicatorImage = backButtonBackgroundImage
barAppearance.backIndicatorTransitionMaskImage = backButtonBackgroundImage

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com