我的应用程序的很大一部分由web视图组成,以提供尚未通过本机实现提供的功能。网络团队没有计划为网站实施黑暗主题。因此,我的应用程序在iOS 13上的暗模式支持看起来会有点一半一半。
是否可以选择退出暗模式支持,这样我们的应用程序总是显示光模式,以匹配网站主题?
我的应用程序的很大一部分由web视图组成,以提供尚未通过本机实现提供的功能。网络团队没有计划为网站实施黑暗主题。因此,我的应用程序在iOS 13上的暗模式支持看起来会有点一半一半。
是否可以选择退出暗模式支持,这样我们的应用程序总是显示光模式,以匹配网站主题?
当前回答
如果你没有使用Xcode 11或更高版本(即iOS 13或更高版本的SDK),你的应用程序没有自动选择支持暗模式。所以,没有必要选择退出黑暗模式。
如果你使用的是Xcode 11或更高版本,系统会自动为你的应用启用暗模式。根据你的喜好,有两种方法来禁用暗模式。你可以完全禁用它,也可以为任何特定的窗口、视图或视图控制器禁用它。
禁用黑暗模式完全为您的应用程序
你可以通过在你的应用的信息中包含一个值为Light的UIUserInterfaceStyle键来禁用暗模式。plist文件。 这忽略了用户的偏好,总是应用浅色外观的应用程序。
禁用窗口、视图或视图控制器的暗模式
通过设置适当窗口、视图或视图控制器的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
亮点:
/* Everything in the window adopts the style,
including the root view controller and all presentation controllers that
display content in that window.*/
window.overrideUserInterfaceStyle = .light
注意:苹果强烈鼓励在你的应用中支持暗模式。 你只能暂时禁用黑暗模式。
阅读更多:为你的iOS应用程序选择特定的界面风格
其他回答
首先,这是苹果关于退出黑暗模式的词条。 这个链接的内容是为Xcode 11和iOS 13编写的:
整个应用程序通过信息。plist文件(Xcode 12)
在你的信息中使用以下键。plist文件:
UIUserInterfaceStyle
并为其赋值Light。
uiuserinterfacstyle赋值的XML:
<key>UIUserInterfaceStyle</key>
<string>Light</string>
UIUserInterfaceStyle的苹果文档
整个应用程序通过信息。plist在构建设置(Xcode 13)
整个应用程序窗口通过窗口属性
你可以针对应用程序的窗口变量设置overrideUserInterfaceStyle。这将应用于出现在窗口中的所有视图。这在iOS 13中是可用的,所以对于支持以前版本的应用程序,你必须包含可用性检查。
根据您的项目是如何创建的,这可能在AppDelegate或SceneDelegate文件中。
if #available(iOS 13.0, *) {
window?.overrideUserInterfaceStyle = .light
}
单独的UIViewController或UIView
你可以针对UIViewControllers或UIView的overrideUserInterfaceStyle变量设置overrideUserInterfaceStyle。这在iOS 13中是可用的,所以对于支持以前版本的应用程序,你必须包含可用性检查。
斯威夫特
override func viewDidLoad() {
super.viewDidLoad()
// overrideUserInterfaceStyle is available with iOS 13
if #available(iOS 13.0, *) {
// Always adopt a light interface style.
overrideUserInterfaceStyle = .light
}
}
对于Objective-C中的可怜人
if (@available(iOS 13.0, *)) {
self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}
当针对UIViewController设置时,视图控制器和它的子控制器采用定义的模式。
当针对UIView设置时,视图及其子视图采用已定义的模式。
overrideUserInterfaceStyle的苹果文档
通过SwiftUI View的个人视图
您可以将preferredColorScheme设置为浅色或深色。提供的值将设置演示的配色方案。
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Light Only")
.preferredColorScheme(.light)
}
}
首选配色方案的苹果文档
感谢@Aron Nelson, @Raimundas Sakalauskas, @NSLeader和@rmaddy用他们的反馈改进了这个答案。
import UIKit
extension UIViewController {
override open func awakeFromNib() {
super.awakeFromNib()
if #available(iOS 13.0, *) {
overrideUserInterfaceStyle = .light
}
}
}
if #available(iOS 13.0, *) {
overrideUserInterfaceStyle = .light
} else {
// Fallback on earlier versions
}
objective - c版本
if (@available(iOS 13.0, *)) {
_window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}
这里有一些小贴士和技巧,你可以在你的应用程序中使用来支持或绕过黑暗模式。
第一个技巧:重写ViewController样式
你可以覆盖UIViewController的界面风格
1: overrideuserinterfacstyle = .dark //暗模式 2: overrideuserinterfacstyle = .light //光照模式
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
overrideUserInterfaceStyle = .light
}
}
第二个技巧:在info.plist中添加一个键
您可以简单地添加一个新密钥
UIUserInterfaceStyle
在你的应用程序信息。plist,并将其值设置为Light或Dark。这将覆盖应用程序默认样式为您提供的值。 你不需要在每个viewController中添加overrideUserInterfaceStyle = .light这一行,只需在info中添加一行即可。就是这样。