Xcode 11 — SwiftUI's dark mode setup

前端 未结 3 1638
感动是毒
感动是毒 2021-01-04 15:14

Okay. I know this shouldn\'t be rocket science. I can\'t seem to get dark mode working and I\'ve read the documentation a few times. Hoping someone can pick out what I\'m

相关标签:
3条回答
  • 2021-01-04 15:49

    This is probably a bug in this beta release of Xcode 11. I tried the dark mode feature in a UIKit application and it is working perfectly using UIColor but the same color wouldn’t work using Color in SwiftUI. Hopefully this will be fixed in the next releases.


    Update: This issue was fixed with Xcode 11 beta 3.

    0 讨论(0)
  • 2021-01-04 16:04

    You can change color scheme in your preview

    struct ContentView_Previews : PreviewProvider {
        static var previews: some View {
            ContentView().environment(\.colorScheme, .dark)
        }
    }
    

    upd: and you can create any previews for light and dark modes

    struct ContentView_Previews : PreviewProvider {
        static var previews: some View {
            Group {
                ContentView()
                ContentView().environment(\.colorScheme, .dark)
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-04 16:10

    A working (but quite verbose) solution we can use to overcome this current limitation is to extend Color with methods parameterised with the current color scheme as follows:

    import SwiftUI
    
    extension Color {
    
        static let lightBackgroundColor = Color(white: 1.0)
    
        static let darkBackgroundColor = Color(white: 0.0)
    
        static func backgroundColor(for colorScheme: ColorScheme) -> Color {
            if colorScheme == .dark {
                return darkBackgroundColor
            } else {
                return lightBackgroundColor
            }
        }
    }
    

    And in the views where you need to access these colors you would add an environment property for the color scheme and use it to retrieve the dynamic color:

    import SwiftUI
    
    struct ColoredView : View {
    
        @Environment(\.colorScheme) var colorScheme: ColorScheme
    
        var body: some View {
            Rectangle().fill(Color.backgroundColor(for: self.colorScheme))
        }
    }
    

    These colours defined in code work for Xcode previews as well as the simulator.

    0 讨论(0)
提交回复
热议问题