SwiftUI – 导航栏“isTranscluent”属性在 iPad 上崩溃

Posted

技术标签:

【中文标题】SwiftUI – 导航栏“isTranscluent”属性在 iPad 上崩溃【英文标题】:SwiftUI – Navigation bar "isTranscluent" property crashes on iPad 【发布时间】:2020-06-27 06:38:47 【问题描述】:

如何使用 SwiftUI 为 iPad 导航栏设置isTranscluent 属性。以下代码在 iPhone 中运行良好,但在 iPad 中崩溃并出现错误:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

UINavigationBar.appearance().isTranslucent = false

【问题讨论】:

适用于 Xcode 11.4 / iPad Air3。 How to create a Minimal, Reproducible Example @Asperi 你检查过 SwiftUI 吗? 我确实做到了:) 【参考方案1】:

使用 UIKit 在 Xcode 12.0 Beta(iPad Pro 2018 和 iPadOS 13.5)中运行良好:

navigationController.navigationBar.isTranslucent = false

在使用 SwiftUI 的 Xcode 12.0 Beta(iPad Pro 2018 和 iPadOS 13.5)中也可以正常工作:

struct NavigationConfigurator: UIViewControllerRepresentable  ... 

NavigationView 

    ScrollView 
        Text("Scroll View")
    
    .navigationBarTitle("Navigation Bar", displayMode: .inline)
    .background(NavigationConfigurator  controller in
        controller.navigationBar.barTintColor = .red
        controller.navigationBar.titleTextAttributes = [.foregroundColor : .grey]
        controller.navigationBar.isTranslucent = false
    )

【讨论】:

以上是关于SwiftUI – 导航栏“isTranscluent”属性在 iPad 上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中的 QLPreviewController 缺少导航栏

Objective C 到 SwiftUI 隐藏导航栏

SwiftUI 搜索栏与导航栏一致

SwiftUI - 两个导航栏

SwiftUI - 设置状态栏背景颜色以与导航栏对齐

使用 SwiftUI 设置导航栏标题字体