네비게이션 바에서 뒤로 버튼의 색상 변경


194

설정 버튼의 색상을 흰색으로 변경하려고하는데 변경할 수 없습니다.

나는이 두 가지를 모두 시도했다.

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

그러나 변화는 없지만 여전히 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

그 버튼을 흰색으로 만들려면 어떻게합니까?

답변:


284

보드의 빈 공간을 클릭하여 스토리 보드의 전체 색조 색상을 변경하고 오른쪽 도구 모음에서 "파일 관리자 표시"를 선택하면 도구 모음의 하단에 "글로벌 색조"옵션이 표시됩니다.

스토리 보드의 전역 색조 옵션


7
와우 .. 좋은 발견!. 프로그래밍 방식으로이 작업을 수행하는 방법을 알고 있습니까?
Paul Lehn

10
훌륭한 발견이지만 글로벌 틴트를 흰색으로 변경하면 (원래 질문에 따라) 테이블 뷰 세부 정보 표시기 표시 등이 흰색으로 변경되어 문제의 테이블에서 보이지 않게됩니다.
Mike Fischer

1
Mike의 문제에 추가 :이 컨트롤은 또한 모든 텍스트 버튼을이 색상으로 만들므로 수동으로 색상을 설정해야합니다 (즉 기본 색상이 분명하지 않음) 또는 다른 방법을 사용해야합니다.
사이렌

4
이것은 빠르고 쉬운 수정이지만 색상이 흰색이거나 배경과 일치하면 다른 문제가 발생합니다. 텍스트 필드가 있으면 커서가 눈에 띄지 않게되어 커서가 보이지 않기 때문에 사용자가 텍스트 필드에 쓸 수없는 것처럼 보입니다.
호세 라미레즈

5
@PaulLehn 프로그래밍 방식으로 이렇게하려면 다음과 같이 AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)쓸 수 있습니다.self.window!.tintColor = .yourColor
mmika1000

206

이 코드는 화살표 색상을 변경합니다

self.navigationController.navigationBar.tintColor = UIColor.whiteColor();

이것이 작동하지 않으면 아래 코드를 사용하십시오.

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()

스위프트 3 노트

UIColor.whiteColor() 비슷하게 단순화되었습니다 UIColor.white

또한 이전에 암시 적으로 많은 옵션이 명시 적으로 변경되었으므로 다음이 필요할 수 있습니다.

self.navigationController?.navigationBar =

7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()나를 위해 일했습니다 (Swift 2.2)
Mike Fischer

self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor ()는 나를 위해 일했습니다 (Swift 3)
Ajay.km

UIBarStyle.Black을 사용하는 이유를 설명 할 수 있습니까?
mmika1000

업데이트하십시오 : self.navigationController? .navigationBar.tintColor =
12

1
Xcode 11에서는 여전히 뒷부분의 텍스트가 그대로 유지됩니다.
jeff ayan


56

이것을 사용해야합니다 :

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white

버튼이 흰색이되었지만 배경색이 훨씬 밝아졌습니다. 바의 배경에 풀 컬러를 다시 부여하는 방법을 알고 있습니까?
Brandon Evans

이것이 정답입니다. barTintColor와 제목 / 막대 버튼을 흰색으로 설정하여 막대를 자주색으로 만듭니다.
zirinisp

36

빠른

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }

1
신속한 3에서 사용
Deepak Tagadiya

사용할 수있는 빠른 버전도 알려주십시오.
Deepak Tagadiya

그리고 프로젝트 에서이 코드를 작성하는 클래스 / 파일 / vc는 무엇입니까?
Deepak Tagadiya

viewWillAppear에서 호출되는 setCloseButton () 함수 시작시.
Jayprakash Dubey

NextViewController.swift 파일에 쓰고, viewDidLoad ()에도 씁니다.
Deepak Tagadiya

20

이처럼 사용할 수 있습니다. 안에 넣으십시오 AppDelegate.swift.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().translucent = false
        UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]

        return true
    }

20

스위프트 4.2

완전한 앱 테마 변경

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().tintColor = .white

        return true
    }

특정 컨트롤러 변경

let navController = UINavigationController.init(rootViewController: yourViewController) 
navController.navigationBar.tintColor = .red

present(navController, animated: true, completion: nil)

모든 응용 프로그램의 색상이 변경됩니다. 특정 화면 / 특정에 맞게 변경해야하는 경우 어떻게해야 UINavigationController합니까?
Vyachaslav Gerchicov

위의 답변 @VyachaslavGerchicov는 특정 컨트롤러를 변경하려는 경우 완전한 앱 테마입니다. 다음과 같이하십시오 : navController = UINavigationController.init (rootViewController : yourViewController) navController.navigationBar.tintColor = .red
AiOsN

iOS 13을 사용하는 경우 didFinishLaunchingWithOptions를 더 이상 사용하지 않으면 SceneDelegate로 이동되었습니다.
JBarros35

15

에서 Swift3 ,하려면 뒤로 단추를하는 설정 red.

self.navigationController?.navigationBar.tintColor = UIColor.red

이 탐색 모음이 아닌 바 버튼 항목을 설정합니다
carlodonz

1
네, 그게 문제였습니다.
Vincent

"뒤로의 색상 변경 버튼 탐색 모음에서"
carlodonz

이것이 나를 위해 일한 유일한 방법이었습니다. 지금 애플의 구현에 문제가있는 것 같습니다 ...
Dave Y

13

Swift 4에서는 다음을 사용하여이 문제를 처리 할 수 ​​있습니다.

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black

8

스위프트 3

Swift 3에 가장 많이 답한 답변이 맞지 않습니다.

여기에 이미지 설명을 입력하십시오

색상을 변경하는 올바른 코드는 다음과 같습니다.

self.navigationController?.navigationBar.tintColor = UIColor.white

색상을 변경하려면 위의 UIColor.white를 원하는 색상으로 변경하십시오.


이것이 나를 위해 일한 유일한 방법이었습니다. 지금 애플의 구현에 문제가있는 것 같습니다 ...
Dave Y

7

모든 답변 설정 UINavigationBar.appearance().tintColor은의 Apple 문서와 충돌 UIAppearance.h합니다.

iOS7에 대한 참고 사항 : iOS7에서 tintColor속성이로 이동했으며 UIView에 설명 된 특수 상속 된 동작이 UIView.h있습니다. 이 상속 된 동작은 모양 프록시와 충돌 할 수 있으므로 tintColor이제 모양 프록시에서 허용되지 않습니다.

Xcode에서는 모양 프록시와 함께 사용하려는 각 속성을 명령 클릭하여 헤더 파일을 검사하고 속성에 주석을 달아야합니다 UI_APPEARANCE_SELECTOR.

따라서 모양 프록시를 통해 탐색 모음을 자주색으로 표시하고 앱 전체에서 제목과 버튼을 흰색으로 표시하는 올바른 방법은 다음과 같습니다.

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white

UIBarButtonItem의 서브 클래스가 아닌 UIView것이 아니라 NSObject. 그래서 그 tintColor속성은 상속되지 않습니다 tintColor에서 UIView.

불행히도, UIBarButtonItem.tintColor주석이 붙어 UI_APPEARANCE_SELECTOR있지는 않지만 문서 버그로 보입니다. 이 레이더의 Apple Engineering의 답변에 따르면 지원됩니다.


UINavigationBar.appearance (). largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white] // 또한
Guilherme


6

AppDelegate클래스 내 에서이 코드를 사용하십시오 didFinishLaunchingWithOptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

UINavigationBar.appearance().tintColor = .white

}

4

이 코드를 사용해보십시오 :

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
    navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}

대단히 감사합니다
Arpit B Parekh


4

"Settings"뷰 컨트롤러에 뒤로 버튼이 이미 있고 "Payment Information"뷰 컨트롤러의 뒤로 버튼 색상을 다른 것으로 변경하려는 경우 "Settings"뷰 컨트롤러 내에서이를 수행 할 수 있습니다. :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "YourPaymentInformationSegue"
    {
        //Make the back button for "Payment Information" gray:
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray               
    }
}

3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

이것은 iOS 9.0 이상에서 작동합니다.


2

AppDelegate.swift 에서 didFinishLaunchingWithOptions 함수에 다음 코드를 추가하십시오

var navigationBarAppearace = UINavigationBar.appearance()

navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade

// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]

이 코드는 다음과 같은 오류를 발생시킵니다. "확인되지 않은 식별자 'uicolorFromHex'사용"누구든지 그 문제를 해결할 수 있습니까?
jonathan3087 2016 년

아마도 UIColor의 확장입니다. 확장을 만드는 방법을 검색 할 수 있습니다.
KvdLingen

2

스위프트 2.0를 들어, 변경하려면 탐색 바 색조 색상 , 제목 텍스트뒤로 버튼의 색조 색상이 AppDelegate.swift에서 다음을 사용하여 변경할

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

  // Override point for customization after application launch.


    //Navigation bar tint color change

    UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)

    //Back button tint color change

    UINavigationBar.appearance().barStyle = UIBarStyle.Default
    UINavigationBar.appearance().tintColor =  UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)

    //Navigation Menu font tint color change

    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent


    return true
}

2

왜 아무도 이것을 언급하지 않았는지 모르겠지만 ... 나는 당신이 내 일을 정확히하고 있었으며 viewDidLoad작동하지 않았습니다. 그런 다음 코드를 넣고 viewWillAppear모두 작동했습니다.

위의 해결책은 단일 barbuttonItem 을 변경하는 것입니다. 코드의 모든 navigationBar 의 색상을 변경 하려면 이 답변 을 따르십시오 .

기본적으로 클래스 자체를 appearance()변경하는 것은 앱에서 해당 뷰의 모든 인스턴스를 전역 적으로 변경하는 것과 같습니다. 자세한 내용은 여기를 참조 하십시오


1

뒤로 버튼을 숨기고 스스로 선택하십시오. 그런 다음 색상을 설정하십시오.

내가 그거 했어:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()

1
질문은 구체적으로 왼쪽 탐색 항목의 스타일을 지정하는 것과 관련이 있으며 질문에 직접 대답하는 데 가장 가깝습니다.
공예

0

-(void) viewDidLoad의 다음 줄로 해결됩니다.

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;

(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro

0

이 줄을 추가해야합니다

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black

0

전역 UI를 설정하거나 ViewController에 넣는 것보다 사용자 정의 NavigationController를 선호합니다.

여기 내 해결책이 있습니다


class AppNavigationController : UINavigationController {

  override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
  }

  override func viewWillAppear(_ animated: Bool) {

  }

}
extension AppNavigationController : UINavigationControllerDelegate {

  func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let backButtonItem = UIBarButtonItem(
      title: "   ",
      style: UIBarButtonItem.Style.plain,
      target: nil,
      action: nil)
    backButtonItem.tintColor = UIColor.gray
    viewController.navigationItem.backBarButtonItem = backButtonItem
  }

  func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {

  }

}

또한 EKEventEditViewController , PickerViewController 와 같은 Apple Api를 엉망으로 만들 필요가 없습니다.UIBarButtonItem.appearance().tintColor = .white


0
    self.navigationController?.navigationBar.tintColor = UIColor.black // to change the all text color in navigation bar or navigation 
    self.navigationController?.navigationBar.barTintColor = UIColor.white // change the navigation background color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black] // To change only navigation bar title text color
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.