我的应用程序很大一部分由Web视图组成,以提供本机实现尚不可用的功能。 Web团队没有计划为网站实施深色主题。因此,在iOS 13上支持深色模式的情况下,我的应用看上去将只有一半/一半。
是否可以选择不支持暗模式,以便我们的应用始终显示亮模式以匹配网站主题?
答案 0 :(得分:57)
如果您没有使用Xcode 11或更高版本(即iOS 13或更高版本的SDK),则您的应用尚未自动选择支持暗模式。因此,无需选择退出黑暗模式。
如果您使用的是Xcode 11或更高版本,则系统已自动为您的应用启用暗模式。有两种方法可以根据您的喜好禁用暗模式。您可以完全禁用它,也可以对任何特定的窗口,视图或视图控制器禁用它。
为您的应用完全禁用暗模式
您可以通过在应用的Info.plist文件中添加值为UIUserInterfaceStyle
的{{1}}键来禁用黑暗模式。
这会忽略用户的喜好,并始终为您的应用添加亮丽的外观。
为窗口,视图或视图控制器禁用暗模式
通过设置适当的窗口,视图或视图控制器的Light
属性,可以强制界面始终以浅色或深色显示。
视图控制器:
overrideUserInterfaceStyle
观看次数:
override func viewDidLoad() {
super.viewDidLoad()
/* view controller’s views and child view controllers
always adopt a light interface style. */
overrideUserInterfaceStyle = .light
}
窗口:
// The view and all of its subviews always adopt light style.
youView.overrideUserInterfaceStyle = .light
注意:Apple强烈建议您在应用中支持暗模式。所以, 您只能暂时禁用黑暗模式。
在此处了解更多信息:Choosing a Specific Interface Style for Your iOS App
答案 1 :(得分:29)
********** Xcode 11及更高版本的最简单方法***********
在</dict></plist>
之前将其添加到info.plist
<key>UIUserInterfaceStyle</key>
<string>Light</string>
答案 2 :(得分:21)
如果您要退出整个应用,则上述答案有效。如果您使用的是具有UI的lib,并且您对.plist的编辑并不奢侈,那么也可以通过代码来实现。
如果要使用iOS 13 SDK进行编译,则只需使用以下代码即可:
迅速:
if #available(iOS 13.0, *) {
self.overrideUserInterfaceStyle = .light
}
Obj-C:
if (@available(iOS 13.0, *)) {
self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}
但是,如果您也希望代码针对 iOS 12 SDK 进行编译(目前仍是最新的稳定SDK),则应使用选择器。带选择器的代码:
Swift(XCode将显示此代码的警告,但这是目前唯一的方法,因为SDK 12中不存在该属性,因此无法编译):
if #available(iOS 13.0, *) {
if self.responds(to: Selector("overrideUserInterfaceStyle")) {
self.setValue(UIUserInterfaceStyle.light.rawValue, forKey: "overrideUserInterfaceStyle")
}
}
Obj-C:
if (@available(iOS 13.0, *)) {
if ([self respondsToSelector:NSSelectorFromString(@"overrideUserInterfaceStyle")]) {
[self setValue:@(UIUserInterfaceStyleLight) forKey:@"overrideUserInterfaceStyle"];
}
}
答案 3 :(得分:16)
Xcode 12和iOS 14更新。我已经尝试了以前的选项来选择退出黑暗模式,而info.plist文件中的这句话对我不起作用:
<key>UIUserInterfaceStyle</key>
<string>Light</string>
现在将其重命名为:
<key>Appearance</key>
<string>Light</string>
此设置将阻止整个应用程序中的所有黑暗模式。
已编辑:
修正了错字,谢谢@sarah
答案 4 :(得分:12)
最新更新-
如果您使用的是Xcode 10.x,则iOS 13.x的默认UIUserInterfaceStyle
是light
。在iOS 13设备上运行时,它将仅在灯光模式下工作。
无需在Info.plist文件中显式添加UIUserInterfaceStyle
键,添加它会在验证应用程序时出现错误,提示:
无效的Info.plist键。 Payload / AppName.appInfo.plist文件中的键“ UIUserInterfaceStyle”无效。
使用Xcode 11.x时,仅在Info.plist文件中添加UIUserInterfaceStyle
键。
答案 5 :(得分:8)
iOS 14.3 和 Xcode 12.3 更新
在 info.plist 文件中将 Appearance 添加为 Light。
<key>Appearance</key>
<string>Light</string>
答案 6 :(得分:8)
如果您将UIUserInterfaceStyle
键添加到plist文件中,则Apple可能会拒绝此处所述的发行版本:https://stackoverflow.com/a/56546554/7524146
无论如何,明确告诉每个ViewController self.overrideUserInterfaceStyle = .light
都是很烦人的。但是,您可以对根window
对象使用一次这种和平的代码:
if #available(iOS 13.0, *) {
if window.responds(to: Selector(("overrideUserInterfaceStyle"))) {
window.setValue(UIUserInterfaceStyle.light.rawValue, forKey: "overrideUserInterfaceStyle")
}
}
请注意,您无法在application(application: didFinishLaunchingWithOptions:)
内执行此操作,因为对于该选择器,在此早期阶段不会响应true
。但是您以后可以做。如果您在应用程序中使用自定义AppPresenter
或AppRouter
类,而不是自动在AppDelegate中启动UI,则超级简单。
答案 7 :(得分:7)
window!.overrideUserInterfaceStyle = .light
您可以从SceneDelegate
viewController.overrideUserInterfaceStyle = .light
即使在viewController内部,您也可以设置任何viewController
自己
view.overrideUserInterfaceStyle = .light
即使在视图内部,您也可以设置任何view
自己
如果支持较早的iOS版本,则可能需要使用if #available(iOS 13.0, *) { ,,, }
。
答案 8 :(得分:6)
除了其他回应之外,据我所知,您仅需要在针对iOS 13 SDK(使用XCode 11)进行编译时为Dark模式做好准备。
系统假定应用程序已针对iOS 13或更高版本的SDK进行了链接 支持亮色和深色外观。在iOS中,您可以指定 通过分配特定的界面样式来获得所需的特定外观 到您的窗口,视图或视图控制器。您也可以禁用支持 完全使用Info.plist键即可进入黑暗模式。
答案 9 :(得分:5)
您可以在整个应用程序xcode 11或更高版本中关闭暗模式
添加波纹管
<key>UIUserInterfaceStyle</key>
<string>Light</string>
Info.plist看起来像下面的样子。
答案 10 :(得分:4)
根据Apple的“在iOS上实现暗模式”会话(https://developer.apple.com/videos/play/wwdc2019/214/从31:13开始),可以在任意位置将overrideUserInterfaceStyle
设置为UIUserInterfaceStyleLight
或UIUserInterfaceStyleDark
视图控制器或视图,将在traitCollection
中用于任何子视图或视图控制器。
如SeanR所提到的,您可以在应用程序的plist文件中将UIUserInterfaceStyle
设置为Light
或Dark
来更改整个应用程序。
答案 11 :(得分:3)
我想我已经找到了解决方案。我最初将其从UIUserInterfaceStyle - Information Property List和UIUserInterfaceStyle - UIKit拼凑而成,但现在发现它实际上已记录在Choosing a specific interface style for your iOS app中。
在您的info.plist
中,将UIUserInterfaceStyle
(用户界面样式)设置为 1 (UIUserInterfaceStyle.light
)。
编辑:根据dorbeetle的回答,UIUserInterfaceStyle
的更合适的设置可能是Light
。
答案 12 :(得分:3)
将此添加到 info.plist
<key>UIUserInterfaceStyle</key>
<string>Light</string>
答案 13 :(得分:3)
快捷键5
将暗模式切换为亮模式的两种方法:
1- info.plist
<key>UIUserInterfaceStyle</key>
<string>Light</string>
2-以编程方式或运行时
@IBAction private func switchToDark(_ sender: UIButton){
UIApplication.shared.windows.forEach { window in
//here you can switch between the dark and light
window.overrideUserInterfaceStyle = .dark
}
}
答案 14 :(得分:2)
我的应用程序目前不支持暗模式,并使用浅色应用程序栏颜色。通过向我的Info.plist
添加以下密钥,我可以将状态栏内容强制为深色文本和图标:
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleDarkContent</string>
<key>UIUserInterfaceStyle</key>
<string>Light</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
在此处查找其他可能的值:https://developer.apple.com/documentation/uikit/uistatusbarstyle
答案 15 :(得分:2)
if (@available(iOS 13.0, *)) {
_window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}
答案 16 :(得分:2)
是的,您可以通过在viewDidLoad中添加以下代码来跳过:
if #available(iOS 13.0, *) {
// Always adopt a light interface style.
overrideUserInterfaceStyle = .light
}
答案 17 :(得分:1)
这里有一些提示和技巧,您可以在应用程序中使用它们来支持或绕过黑暗模式。
您可以通过以下方式覆盖UIViewController的界面样式:
1:overrideUserInterfaceStyle = .dark //用于黑暗模式
2:overrideUserInterfaceStyle = .light //用于灯光模式
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
overrideUserInterfaceStyle = .light
}
}
只需添加一个新密钥
在您的应用程序info.plist中UIUserInterfaceStyle
并将其值设置为Light或Dark。这会将应用默认样式覆盖为您提供的值。 您不必在每个viewController中添加overrideUserInterfaceStyle = .light,只需在info.plist中仅添加一行即可。
答案 18 :(得分:1)
只需在您的_has
文件中添加以下密钥:
info.plist
答案 19 :(得分:1)
是的..您可以在 iOS 项目中添加以下设置。
在 info.plist 文件中,将 UIUserInterfaceStyle 添加到 Light。
如果你的项目是 IONIC .. 你可以在配置文件中添加以下设置
<platform name="ios">
<edit-config file="*-Info.plist" mode="merge" target="UIUserInterfaceStyle">
<string>Light</string>
</edit-config>
</platform>
使用这些设置,设备暗模式不会影响您的应用。
答案 20 :(得分:0)
在 ViewController.swift 文件中添加 overrideUserInterfaceStyle = .light
或在 info.plist 文件中将 Appearance 更改为“light”
答案 21 :(得分:0)
我将使用此解决方案,因为窗口属性可能会在应用程序生命周期中更改。因此,需要重复分配“ overrideUserInterfaceStyle = .light”。 UIWindow.appearance()使我们能够设置将用于新创建的UIWindow对象的默认值。
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if #available(iOS 13.0, *) {
UIWindow.appearance().overrideUserInterfaceStyle = .light
}
return true
}
}
答案 22 :(得分:0)
答案 23 :(得分:0)
这个问题有很多答案,您可以像这样在info.plist
中设置它,而不是在AppDelegate
中使用它:
#if compiler(>=5.1)
if #available(iOS 13.0, *) {
self.window?.overrideUserInterfaceStyle = .light
}
#endif
在Xcode 11.3,iOS 13.3上测试
答案 24 :(得分:0)
您可以执行以下操作:将这个新键UIUserInterfaceStyle添加到Info.plist并将其值设置为Light。并以灯光模式显示检查警报控制器。
UIUserInterfaceStyle 光 如果在整个应用程序中都处于亮/暗模式,无论用户如何设置,都可以通过将键UIUserInterfaceStyle添加到Info.plist文件并将其值设置为亮或暗来实现。
答案 25 :(得分:0)
import UIKit
extension UIViewController {
override open func awakeFromNib() {
super.awakeFromNib()
if #available(iOS 13.0, *) {
overrideUserInterfaceStyle = .light
}
}
}
答案 26 :(得分:0)
if #available(iOS 13.0, *) {
overrideUserInterfaceStyle = .light
} else {
// Fallback on earlier versions
}
答案 27 :(得分:0)
只需将这些行添加到info.plist文件中:
<key>UIUserInterfaceStyle</key>
<string>light</string>
这将强制应用仅在轻模式下运行。