My IOS и Mac Catalyst в приложении по умолчанию использует темную тему темного цвета, независимо от темы цвета системы. Когда приложение представляет модальный контроллер представления (всплывающее окно или поповер) на iOS, фон этого представления темный для всей видимой жизни. Но на macOS, если цветовая тема системы является легкой, фон всплывающего окна изначально белый до тех пор, пока вид не загрузится, а фон попора изменяется на белый, когда он отклоняет: < /p>
< img alt = "Анимация, показывающая модальные виды, загружающие неверный цвет фона" src = "
https://i.sstatic.net/vtnz3nlo.gif"/>
В моем модальном представлении контроллеры. Я переопределяю цветовую тему, а также вручную настраивая цвет фона. Это выполняет работу на iOS, но не влияет на macOS: < /p>
Код: Выделить всё
override func viewDidLoad() {
super.viewDidLoad()
self.overrideUserInterfaceStyle = .dark
self.view.backgroundColor = myColor
}
Я настраиваю overdeUserInterfacestyle таким образом на основном контроллере представления; Это обрабатывает основное представление, но не влияет на всплывающие окна и Popovers. Я попытался установить его в приложении: didfinishlaunchingwithoptions: для AppDelegate, в сцене: WillConnectto: Options: для ScenedElegate и даже в ViewDidload для контроллера модального представления. Br /> В файлах XIB, которые я использую для всплывающих часов и Popovers, я попытался установить фон представления верхнего уровня для моего желаемого цвета фона, но это не имело никакого эффекта. (Обычно я устанавливаю их на прозрачные, что хорошо в iOS.) < /P>
По -видимому, MacOS отображает пустое представление перед загрузкой XIB и перед запуском ViewDidload. Есть ли «более глубокий» способ настроить цвет, чтобы избежать этого уродливого визуального эффекта? Минимальный код, который демонстрирует проблему: < /p>
Код: Выделить всё
let test = UIViewController()
App.mainViewController.present(test, animated: true)
Это приводит к белому всплывающему окну, если Mac использует светлую цветную тему, даже если основной контроллер View Controller ReplideUserInterfacestyle установлен на Dark. Я попытался установить переопределение UserInterfacestyle на разных уровнях, но без изменений:
Код: Выделить всё
App.window?.overrideUserInterfaceStyle = .dark
App.mainViewController.overrideUserInterfaceStyle = .dark
let test = UIViewController()
test.overrideUserInterfaceStyle = .dark
test.view.rootView.overrideUserInterfaceStyle = .dark
test.view.window?.overrideUserInterfaceStyle = .dark
App.mainViewController.present(test, animated: true)
Если я устанавливаю цвет фона всплывающего окна, это работает, но сначала оно кажется белым, а затем вступает в силу цвет фона, как в анимации выше.
Код: Выделить всё
let test = UIViewController()
test.view.backgroundColor = App.bgColor
App.mainViewController.present(test, animated: true)
В iOS все, что мне нужно было — это установить overrideUserInterfaceStyle на главном контроллере представления.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... st-windows