【问题标题】:Xcode / plist - run application always in Dark/Light theme on macOSXcode / plist - 在 macOS 上始终以 Dark/Light 主题运行应用程序
【发布时间】:2020-01-16 19:36:30
【问题描述】:

有一个属性可以让应用始终在暗模式下运行 -- UIUserInterfaceStyle

问题是......它在 macOS 上不起作用。

我试过设置

  • 灯光
  • .light
  • 1

文件内部的文件更改是正确的:

<key>UIUserInterfaceStyle</key>
<string>Light</string>

但结果总是一样的 - 它只是不起作用,应用程序在主题的系统配置下运行。

Xcode:版本 11.3.1 (11C504)

MacOS:10.15.2 (19C57) 卡特琳娜

应用基于 SwiftUI

【问题讨论】:

    标签: swift macos swiftui plist


    【解决方案1】:

    问题在于 UIInterfaceStyle 是一个 UIKit 特性。它适用于 tvOS/iOS。它在 MacOS 上什么都不做。您正在编写 MacOS 应用程序,而不是 iOS 应用程序。因此,您对 Info.plist 的更改自然没有任何效果。

    在 MacOS 上选择退出亮/暗模式的方式完全不同,并在此处记录:

    https://developer.apple.com/documentation/appkit/nsappearancecustomization/choosing_a_specific_appearance_for_your_macos_app

    基本上你想使用 NSRequiresAquaSystemAppearance 键(尽管最好采用暗模式兼容性)。

    【讨论】:

    • 我的应用基于 SwiftUI。我想做一个单一的动作来改变应用程序所有窗口的主题,所以......看起来这些文档对于我的情况来说太旧了
    • 我所说的仍然有效。你问为什么你的 Info.plist 设置不起作用,我告诉你原因。
    【解决方案2】:

    如果您正在寻找完整的 SwiftUI 版本:

    import SwiftUI
    
    @main
    struct SwiftUI_Football_GridApp: App {
        var body: some Scene {
            WindowGroup {
                ContentView().preferredColorScheme(.light)
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      第一个解决方案

      尝试从设备或模拟器中卸载应用。确保你清理了项目。右键确实是'Light',区分大小写。

      好的,如果这不起作用,您可以做其他事情来达到相同的结果。

      第二种解决方案

      AppDelegatesdidFinishLaunchingWithOptions下面调用这个代码

      if #available(iOS 13, *) {
          window.overrideUserInterfaceStyle = .light
      }
      

      如果这对你有用,请告诉我。

      【讨论】:

      • 上面写着app是针对macOS的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多