热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在iOS13上可以选择退出暗模式吗?

如何解决《在iOS13上可以选择退出暗模式吗?》经验,为你挑选了10个好方法。

我的应用程序很大一部分由Web视图组成,以提供本机实现尚不可用的功能。Web团队没有计划为网站实施深色主题。因此,在iOS 13上支持深色模式的情况下,我的应用看起来会一半/一半。

是否可以选择不支持暗模式,以便我们的应用程序始终显示亮模式以匹配网站主题?



1> CodeBender..:

首先,这是与退出暗模式有关的Apple条目。 此链接的内容适用于Xcode 11和iOS 13

本部分适用于Xcode 11的用法


如果您希望退出整个申请

方法1

在info.plist文件中使用以下密钥:

UIUserInterfaceStyle

并为其分配值Light

XMLUIUserInterfaceStyle分配:

UIUserInterfaceStyle
Light

方法#2

您可以overrideUserInterfaceStyle针对应用程序的window变量进行设置。

根据项目的创建方式,该AppDelegate文件可能位于文件中,也可能位于中SceneDelegate

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


如果您希望逐个退出UIViewController

override func viewDidLoad() {
    super.viewDidLoad()
    // overrideUserInterfaceStyle is available with iOS 13
    if #available(iOS 13.0, *) {
        // Always adopt a light interface style.
        overrideUserInterfaceStyle = .light
    }
}

Apple文档overrideUserInterfaceStyle

上面的代码在Xcode 11中的样子:

本部分适用于Xcode 10.x的用法


如果您使用Xcode 11进行提交,则可以放心忽略此行下的所有内容。

由于相关的API在iOS 12中不存在,因此在尝试使用上面提供的值时会出现错误:

对于设置overrideUserInterfaceStyleUIViewController

如果您希望逐个退出UIViewController

这可以通过测试编译器版本和iOS版本在Xcode 10中进行处理:

#if compiler(>=5.1)
if #available(iOS 13.0, *) {
    // Always adopt a light interface style.
    overrideUserInterfaceStyle = .light
}
#endif

如果您希望退出整个申请

通过将以下代码添加到AppDelegate文件中,您可以修改上述代码段以使其适用于Xcode 10的整个应用程序。

#if compiler(>=5.1)
if #available(iOS 13.0, *) {
    // Always adopt a light interface style.
    window?.overrideUserInterfaceStyle = .light
}
#endif

但是,使用Xcode版本10.x时,plist设置将失败:

感谢@Aron尼尔森@Raimundas Sakalauskas@NSLeaderrmaddy为改善这样的回答与他们的反馈。


无需在每个视图控制器的“ viewDidLoad”中设置“ overrideUserInterfaceStyle”,而是可以在应用程序的主窗口中对其进行一次设置。如果您希望整个应用程序以一种方式运行,那么会容易得多。
立即更新/上传应用程序时,UIUserInterfaceStyle指示灯被阻止。它被标记为无效的plist条目。(无效的plist键)
无法针对iOS SDK 12(当前最新的稳定SDK)进行编译。请参阅/sf/ask/17360801/,以获得适用于iOS 12 SDK的解决方案。

2> dorbeetle..:

据苹果公司的“实施暗模式iOS上的”会话(https://developer.apple.com/videos/play/wwdc2019/214/开始于31:13),可以集overrideUserInterfaceStyleUIUserInterfaceStyleLightUIUserInterfaceStyleDark任何视图控制器或视图上,它将traitCollection用于任何子视图或视图控制器。

正如SeanR已经提到的,您可以设置UIUserInterfaceStyleLightDark在您的应用程序的plist文件来改变这种为您的整个应用程序。


如果您设置UIUserInterfaceStyle键,则您的应用将在应用商店中被拒绝
拒绝最有可能发生,因为iOS 13 SDK尚未超出Beta版。我认为这应该在Xcode 11 GM可用后立即生效。
苹果拒绝使用ITMS-90190错误代码https://forums.developer.apple.com/thread/121028

3> Ajith R Naya..:

如果您未使用Xcode 11或更高版本(即iOS 13或更高版本的SDK),则您的应用尚未自动选择支持暗模式。因此,无需选择退出黑暗模式。

如果您使用的是Xcode 11或更高版本,则系统已自动为您的应用启用暗模式。有两种方法可以根据您的喜好禁用暗模式。您可以完全禁用它,也可以对任何特定的窗口,视图或视图控制器禁用它。

完全为您的应用禁用暗模式

您可以通过在UIUserInterfaceStyle键中包含与Light应用程序的Info.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

注意:Apple强烈建议您在应用中支持暗模式。因此,您只能暂时禁用黑暗模式。

在此处了解更多信息:为iOS应用选择特定的界面样式



4> SeanR..:

我想我已经找到了解决方案。我最初将其从UIUserInterfaceStyle-信息属性列表和UIUserInterfaceStyle-UIKit拼凑而成,但是现在发现它确实记录在为iOS应用选择特定界面样式中。

在中info.plist,将UIUserInterfaceStyle用户界面样式)设置为1UIUserInterfaceStyle.light)。

编辑:根据dorbeetle的回答,UIUserInterfaceStyle可能更合适的设置是Light


在plist中拥有此密钥将导致App Store拒绝。

5> Kingsley Mit..:

********** Xcode 11及更高版本的最简单方法***********

将此添加到info.plist之前

UIUserInterfaceStyle
Light



6> Raimundas Sa..:

如果您想退出整个应用程序,则上述答案有效。如果您使用的是具有UI的lib,并且您对.plist的编辑并不奢侈,那么也可以通过代码来实现。

如果您要针对iOS 13 SDK进行编译,则只需使用以下代码即可:

迅速:

if #available(iOS 13.0, *) {
    self.overrideUserInterfaceStyle = .light
}

对象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")
    }
}

对象C:

if (@available(iOS 13.0, *)) {
    if ([self respondsToSelector:NSSelectorFromString(@"overrideUserInterfaceStyle")]) {
        [self setValue:@(UIUserInterfaceStyleLight) forKey:@"overrideUserInterfaceStyle"];
    }
}



7> kumarsiddhar..:

最新更新-

如果您使用的是Xcode 10.x,则默认UIUserInterfaceStyle值为lightiOS13.x。在iOS 13设备上运行时,它将仅在灯光模式下工作。

无需UIUserInterfaceStyle在Info.plist文件中显式添加密钥,添加密钥将在验证应用程序时出现错误,提示:

无效的Info.plist密钥。Payload / AppName.appInfo.plist文件中的键“ UIUserInterfaceStyle”无效。

UIUserInterfaceStyle在使用Xcode 11.x时将密钥添加到Info.plist文件中。


@NiranjanMolkeri这与较新的iPhone无关。这是关于iOS 13上的黑暗模式的。在以前的iOS 13 Beta版本中,如果未明确处理,则UI会出现黑暗模式问题。但是在最新版本中,此问题已修复。如果您使用的是XCode 10,则iOS13的默认UIUserInterfaceStyle是light。如果您使用的是Xode11,则需要进行处理。

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,它在早期不会响应。但是您以后可以做。如果您在应用程序中使用自定义AppPresenterAppRouter类,而不是自动在AppDelegate中启动UI,则超级简单。



9> Mojtaba Hoss..:

-对于整个应用程序(窗口):

window!.overrideUserInterfaceStyle = .light

您可以从获取窗口 SceneDelegate

-对于单个ViewController:

viewController.overrideUserInterfaceStyle = .light

您可以设置任何viewController,甚至连它的viewController内部自我

-对于单个视图:

view.overrideUserInterfaceStyle = .light

您可以设置任何view,甚至里面的观点是自我

if #available(iOS 13.0, *) { ,,, }如果支持较早的iOS版本,则可能需要使用。



10> Claudio..:

除了其他响应,据我所知,您仅需要在针对iOS 13 SDK(使用XCode 11)进行编译时为Dark模式做好准备。

系统假定与iOS 13或更高版本的SDK链接的应用程序支持亮外观和暗外观。在iOS中,您可以通过为窗口,视图或视图控制器分配特定的界面样式来指定所需的特定外观。您也可以使用Info.plist键完全禁用对黑暗模式的支持。

链接


推荐阅读
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
author-avatar
过客松鼠_230
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有