วิธีที่ถูกต้องในการตั้งค่าปุ่มลูกศรสีอ่อนใน iOS 13 คืออะไร


11

ใน ios 13, Apple แนะนำวัตถุพร็อกซี UINavigationBarAppearance ใหม่เพื่อตั้งค่าแถบการนำทาง ฉันสามารถตั้งค่าได้เกือบทุกอย่างที่ฉันต้องการยกเว้นสิ่งเล็กน้อย ลูกศรของปุ่มย้อนกลับแสดงผลด้วยสีโทนสีน้ำเงินเสมอและฉันไม่รู้ว่าจะตั้งเป็นสีที่ฉันต้องการได้อย่างไร ฉันใช้[[UINavigationBar appearance] setTintColor:]วิธีเก่าแต่ฉันคิดว่าต้องมีวิธีการบางอย่างกับ UINavigationBarAppearance API API ใครมีความคิดอย่างไร

คำตอบ:


1

วิธีใหม่ของการตั้งค่าสีปุ่มย้อนกลับของรูปลักษณ์ (พร็อกซี) จะเป็น:

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

5

ฉันมีการติดตั้งควบคุมการนำกำหนดเองใน app ของฉันซึ่งปรับเปลี่ยนnavigationBars titleTextAttributes, 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 :)


2
ไม่อยากเชื่อการแฮ็กแก้ไขทั้งหมดที่เราต้องทำเพื่อสนับสนุน iOS 13: / ขอขอบคุณสำหรับการแก้ไข btw!
Sreejith

แปลกฉันไม่ต้องตั้งค่าให้.noneหรือnilฉันเพียงแค่ให้สีหลังจากตั้งค่าลักษณะที่ปรากฏและก็ใช้งานได้
Mark
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.