在中Assets.xcassets,可以添加其他图像,这些图像将根据外观自动切换。这对于静态图像效果很好,但是我试图弄清楚如何对下载的图像执行此操作。
有没有办法设置Imageinit 的暗模式版本,或者SwiftUI中是否有一个函数可以让您检测当前外观是否为暗,以便可以提供其他图像URL?
我可以使用任何视图或ViewController的TraitCollection获取userInterfaceStyle。黑暗或光明。但是,当我强制应用程序使用暗或亮模式时,那么我想知道iOS设备与应用程序无关的当前userInterfaceStyle是什么?
我尝试了UIScreen的Traitcollection,但仍提供应用程序的userInterfaceStyle而不是设备。
我只想在我的应用程序中覆盖暗模式 UI。我补充的UIUserInterfaceStyle是Light。但我不确定它不起作用。还有其他选择吗?
我刚刚在我的应用程序中添加了黑暗模式。
资产目录支持每个资产的多种外观,在 iOS 13 上,这意味着当系统在深色或浅色模式下运行时,会使用正确的资产。
我正在尝试在较旧的 iOS 版本上支持深色模式。 在我尝试这样做的过程中,我添加了一个覆盖来强制黑暗模式,该模式适用于我的自定义颜色和主题,但不适用于图像。
在 iOS13 之前是否可以通过dark编程方式访问图像的外观?
对于 iOS12,我尝试使用以下方法:
if #available(iOS 12.0, *) {
let traits = UITraitCollection(userInterfaceStyle: .dark)
let image = UIImage(
named: "Image",
in: bundle,
compatibleWith: traits
)
}
Run Code Online (Sandbox Code Playgroud)
这只返回正常的外观,并且方法命名似乎表明这只检查我传递的特征集合是否与图像兼容。
我iOS dark mode在我的 iPad 应用程序中提供支持。当品牌徽标图像为黑色时,此问题仅适用于暗模式。一般来说,所有品牌标志都不是白色的,所以光模式没有问题。
以下是两种模式的屏幕截图:
浅色模式下的 Adura 品牌标志
深色模式下的 Adura 品牌标志
我怎样才能容纳这样的标志?我几乎没有建议将徽标后面的背景视图设置为灰色,但同样,某些品牌可能会出现灰色徽标。
我正在将现有应用程序调整为暗模式。
某个视图使用图像来表示特征的状态。我已选择资产目录中的图像并将其Appearances字段从 none 修改为Any, Dark. 然后我添加了该Dark模式的图像,但没有。当我运行该应用程序时,设备处于开启模式时不会出现图像Light。这迫使我将该图像从 更改为Any, Dark,Any, Light, Dark然后定义灯光模式的图像。
我在同一视图上有一个标签,我将该视图更改为Any, Dark只是为了检查它是否正常工作。
为什么一种视图有效而另一种无效?漏洞?
我应该将该标签更改为Any, Light, Dark吗?
我按照RSP-12931:iPAD Pro 上不支持本机分辨率中的说明为我的 Delphi 应用程序创建 iOS LaunchScreen。现在,对于 iOS 13,问题是我需要这个启动屏幕的 2 种变体,一种用于深色模式,另一种用于浅色模式。如何在 XCode 中创建一个基本启动屏幕,以在暗/亮模式下显示自定义背景颜色和徽标图像?
我支持深色模式。在我的一些视图控制器中,我traitCollectionDidChange(_)用于处理用户界面样式更改。
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if #available(iOS 13.0, *) {
if let p = previousTraitCollection {
print("TRAIT COLLECTION \(p.userInterfaceStyle.desc) -> \(traitCollection.userInterfaceStyle.desc). \(UIApplication.shared.applicationState.desc); \(p.hasDifferentColorAppearance(comparedTo: traitCollection) ? "TRAIT CHANGED" : "TRAIT SAME")")
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我按下主页按钮并进入后台时,此方法会触发两次:
TRAIT COLLECTION DARK -> LIGHT. BACKGROUND; TRAIT CHANGED
TRAIT COLLECTION LIGHT -> DARK. BACKGROUND; TRAIT CHANGED
Run Code Online (Sandbox Code Playgroud)
当我在 iOS 设置中更改外观并返回前台时,我得到
TRAIT COLLECTION DARK -> LIGHT. INACTIVE; TRAIT CHANGED
Run Code Online (Sandbox Code Playgroud)
奇怪的。每次我进入后台时,我都会来回更改用户界面样式。为什么?
我试图通过在 Info.plist 文件中将 UIUserInterfaceStyle 键设置为 Light 来禁用暗模式支持,但现在它在 Xcode 12 的 Info.plist 中不可用。
是否仍然可以从 Info.plist 文件为 Xcode 12 中的 iOS 应用程序禁用暗模式支持。
在我的应用程序中,我有一个按钮,我想在触摸它时以动画方式缩小。为此,我创建了一个ButtonStyle具有显式animation. 这按预期工作,但在暗/亮模式系统外观之间切换时引入了问题。如果您在应用程序打开时更改它,Color则会按预期更新,但如果应用程序未打开,应用程序切换器中的快照将显示新系统外观的错误颜色。以下代码在浅色模式下应该是白色背景上的黑框,在深色模式下应该是黑底白字。背景始终会正确更新,但方框在快照中仍保持旧颜色,因此您无法看到它 - 黑底黑字或白底白字 - 至少从 iOS 14.2 开始是这样。问题是animation- 如果我删除快照,则会按预期显示。这是为什么?我该如何解决它?
struct ContentView: View {
var body: some View {
Button(action: {}) {
Color.primary
.frame(height: 100)
}
.buttonStyle(MyButtonStyle())
.padding()
}
}
struct MyButtonStyle: ButtonStyle {
func makeBody(configuration: Self.Configuration) -> some View {
configuration.label
.scaleEffect(configuration.isPressed ? 0.8 : 1)
.animation(.easeOut(duration: 0.5)) //FIXME: Removing this fixes it
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我在浅色模式下运行应用程序,然后关闭它,启用深色模式,然后打开应用程序切换器,发现该框在黑色背景上是黑色的。该框应该是白色的,就像我点击应用程序将其返回前台时一样。