Xcode 11 — настройка темного режима SwiftUI

Хорошо. Я знаю, что это не должно быть ракетостроением. Кажется, я не могу заставить работать темный режим, и я несколько раз читал документацию. Надеясь, что кто-то может выбрать то, что мне не хватает.

У меня есть именованный цвет в каталоге активов.Xcode 11 — настройка темного режима SwiftUI

Я установил свой режим plist в темный режим для облегчения тестирования. Xcode 11 — настройка темного режима SwiftUI

Мое представление контента выглядит так:

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

}

}

Независимо от того, что я делаю, цвет ВСЕГДА имеет вид «Любой», когда он должен приобретать голубой цвет.

Xcode 11 — настройка темного режима SwiftUI

Я знаю, что сам темный режим работает, потому что все системные семантические цвета, предоставляемые Apple, работают просто отлично, поскольку вы можете видеть, что текст «Hello World» изменился на белый.

Любые идеи, что мне не хватает, или кто-нибудь еще сталкивается с этой проблемой с Xcode 11 Beta 1?

Эта проблема была исправлена ​​в Xcode 11 beta 3:]

M Reza 03.07.2019 04:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
11
1
9 299
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете изменить цветовую схему в предварительном просмотре

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

вверх: и можно создавать любые превьюшки для светлого и тёмного режимов

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

Это не работает с цветами, пожалуйста, внимательно прочитайте вопрос, попробуйте то же самое, а затем ответьте.

Mehul Thakkar 18.06.2019 07:17
Ответ принят как подходящий

Вероятно, это ошибка в этой бета-версии Xcode 11. Я попробовал функцию темного режима в приложении UIKit, и она отлично работает с использованием UIColor, но тот же цвет не будет работать с использованием Color в SwiftUI. Надеюсь, это будет исправлено в следующих релизах.


Обновлять: эта проблема устранена в Xcode 11 бета 3.

согласованный. просто помогает запустить его другим разработчикам, а не рвать на себе волосы!

Craig Fisher 14.06.2019 02:14

это все еще происходит в бета-версии 2, не так ли?

Andrea Miotto 22.06.2019 11:51

@Miotz Да, это еще не исправлено.

M Reza 22.06.2019 12:06

Рабочее (но довольно подробное) решение, которое мы можем использовать для преодоления этого текущего ограничения, состоит в том, чтобы расширить 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, так и для симулятора.

Если нам нужно использовать такой цвет, то что означает цветовой шаблон в активах. ваш вопрос не дает ответа на вопрос, вместо этого он дает альтернативный ручной способ...

Mehul Thakkar 18.06.2019 07:19

Это все очень хорошо и модно, но, как указывали другие, цветовой шаблон в активах не работает в текущей бета-версии. Я просто предоставляю рабочую альтернативу.

l_priebe 18.06.2019 20:22

У меня работает - по крайней мере, как временное решение. Я хотел семантические границы для нескольких представлений, содержащихся в моем корне ContentView. Я ценю совет.

user7014451 24.06.2019 16:46

Другие вопросы по теме