[uinavigationbar] iOS 13에서 버튼 화살표 색조를 다시 설정하는 올바른 방법은 무엇입니까

iOS 13에서 Apple은 탐색 막대 모양을 설정하기 위해 새로운 UINavigationBarAppearance 프록시 객체를 도입했습니다. 하나의 작은 것을 제외하고 필요한 거의 모든 것을 설정할 수있었습니다. 뒤로 버튼의 화살표는 항상 파란색 색조로 렌더링되며 원하는 색상으로 설정하는 방법을 모릅니다. 나는 오래된 [[UINavigationBar appearance] setTintColor:]방법을 사용하고 있지만 UINavigationBarAppearance objects API로 그것을 할 수있는 방법이 있어야한다고 생각합니다. 아무도 어떻게 알아?



답변

모양 (프록시)의 뒤로 단추 색상을 설정하는 새로운 방법은 다음과 같습니다.

let appearance = UINavigationBarAppearance()

// Apply the configuration option of your choice
appearance.configureWithTransparentBackground()

// Create button appearance, with the custom color
let buttonAppearance = UIBarButtonItemAppearance(style: .plain)
buttonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.white]

// Apply button appearance
appearance.buttonAppearance = buttonAppearance

// Apply tint to the back arrow "chevron"
UINavigationBar.appearance().tintColor = UIColor.whiteI

// Apply proxy
UINavigationBar.appearance().standardAppearance = appearance

// Perhaps you'd want to set these as well depending on your design:
UINavigationBar.appearance().compactAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance


답변

내 앱 수정에서 사용자 지정 탐색 컨트롤러 설정이 navigationBartitleTextAttributes,tintColor 그리고 다른 사람은 다른 시나리오에 따라 달라집니다.

iOS 13에서 앱을 실행하면 backBarButtonItem화살표의 기본 색조가 파란색으로 표시됩니다. 뷰 디버거는 UIBarButtonItems 만UIImageView 푸른 색조를 가지고 .

내가 한 일은 navigationBar.tintColor색을 변경하기 위해 두 번 설정하는 것이 었습니다 …

public class MyNavigationController: UINavigationController, UINavigationControllerDelegate {

    public var preferredNavigationBarTintColor: UIColor?

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


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

        // if you want to change color, you have to set it twice
        viewController.navigationController?.navigationBar.tintColor = .none
        viewController.navigationController?.navigationBar.tintColor = preferredNavigationBarTintColor ?? .white

        // following line removes the text from back button
        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

    }


솔루션을 찾을 때 가장 이상한 부분은 일관성없는 결과였습니다.보기 수명주기 및 / 또는 모양 애니메이션 또는 Xcode 캐시와 관련이 있다고 생각합니다. 🙂


답변