web-dev-qa-db-ja.com

Xcode 11-SwiftUIのダークモードのセットアップ

はい。私はこれがロケット科学であってはならないことを知っています。ダークモードが機能していないようで、ドキュメントを数回読みました。誰かが私が行方不明のものを見つけられることを願っています。

アセットカタログに名前付きの色があります。 enter image description here

テストを簡単にするために、plistモードをダークモードに設定しました。 enter image description here

私のコンテンツビューは次のようになります。

struct ContentView : View {
var body: some View {
    VStack {
        Text("Hello World")
        Text("Yo yo yo")
            .color(Color("darkModeColor"))
    }

}

}

私が何をしようとも、色は常にシアン色を帯びているはずの「すべて」の外観です。

enter image description here

Appleによって提供されるすべてのシステムセマンティックカラーは、「Hello World」テキストが白に変更されているのを確認できるので、正常に機能しているため、ダークモード自体は機能します。

Xcode 11 Beta 1でこの問題に遭遇しているアイデアはありますか?

9
Craig Fisher

これは、おそらくXcode 11のこのベータリリースのバグです。UIKitアプリケーションでダークモード機能を試しましたが、UIColorを使用すると完全に機能しますが、Colorを使用すると同じ色が機能しませんSwiftUI。うまくいけば、これは次のリリースで修正されるでしょう。


pdate:この問題はXcode 11 betaで修正されました。

この現在の制限を克服するために使用できる実用的な(ただし非常に詳細な)ソリューションは、次のように現在の配色でパラメーター化されたメソッドでColorを拡張することです。

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
        }
    }
}

そして、これらの色にアクセスする必要があるビューでは、配色の環境プロパティを追加し、それを使用して動的な色を取得します。

import SwiftUI

struct ColoredView : View {

    @Environment(\.colorScheme) var colorScheme: ColorScheme

    var body: some View {
        Rectangle().fill(Color.backgroundColor(for: self.colorScheme))
    }
}

コードで定義されたこれらの色は、Xcodeプレビューおよびシミュレーターで機能します。

3
l_priebe