我当前的应用程序是用 objC 和 Swift 开发的。我需要支持暗模式。谁能建议我如何在全球范围内实现这一目标?
问问题
4882 次
4 回答
7
这是添加颜色逻辑的代码,应该出现在暗模式下。
if self.traitCollection.userInterfaceStyle == .dark {
//Add your Dark mode colors here
} else {
//Your normal colors should appear here
}
要了解有关在 iOS 应用程序中调整暗模式的更多信息,请参阅以下博客文章。
于 2019-11-25T11:33:10.577 回答
5
Xcode11-beta 的界面生成器中提供了几种语义系统颜色。请使用它们来支持 .light 和 .darkMode
请逐步按照基本说明进行操作。
- UIView - 使用界面生成器中的 systemBackgroundColor。
- UILabel - 使用界面生成器中的 defaulLabel 颜色。
- CustomView - 请使用 .xcassests 目录并创建新的颜色集,从属性检查器中为 .light 和 .darkMode添加外观选项,并为两种模式提供不同的颜色。
- CustomImages - 请使用 .xcassests 目录并从属性检查器中为 .light 和 .darkMode添加外观选项,并为两种模式提供不同的图像。
还有一个选项可以使用代码提供不同的颜色和不同的图像。
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) updateUIForiOS13() } private func isDarkMode() -> Bool{ if #available(iOS 12.0, *) { let isDark = traitCollection.userInterfaceStyle == .dark ? true : false return isDark } return false }
于 2019-07-11T09:38:31.957 回答
1
通过使用 Swift 模块,将包含 UIColor 扩展代码的 .swift 文件包含到您的 Objective-C 代码中。它可以在Your_Target > Build Settings > Objective-C Generated Interface Header Name下找到
这将生成一个头文件“MyApp-Swift.h”
然后将 @objc 添加到包含 UIColor 扩展代码的 .swift 文件中的每个静态颜色函数,以将其公开给 Objective-C。
@objc static func color_three() -> UIColor {
return themeConvertor(dark: "#000000", light: "#FFFFFF")
}
在您的 Objective-C .m 文件中,导入模块,然后从 UIColor 扩展引用颜色函数:
#import "MyApp-Swift.h" // swift module
- (void)awakeFromNib {
[super awakeFromNib];
// color
textLabel.textColor = [UIColor color_three];
}
游乐场示例
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
// color_one
let view = UIView()
view.backgroundColor = UIColor.color_one()
// color_two
let label = UILabel()
label.frame = CGRect(x: 150, y: 200, width: 200, height: 20)
label.text = "Hello World!"
label.textColor = UIColor.color_two()
view.addSubview(label)
self.view = view
}
}
// put this into a file called UIColor+Extensions.swift
extension UIColor {
static func themeConvertor(dark: String, light: String) -> UIColor {
if #available(iOS 13, *) {
return UIColor.init { (trait) -> UIColor in
// the color can be from your own color config struct as well.
return trait.userInterfaceStyle == .dark ? UIColor.init(hex: dark)! : UIColor.init(hex: light)!
}
} else {
return UIColor.init(hex: light)!
}
}
// Color 1
// Black & White
@objc static func color_one() -> UIColor {
return themeConvertor(dark: "#000000", light: "#FFFFFF")
}
// Color 2
// Orange & Blue
@objc static func color_two() -> UIColor {
return themeConvertor(dark: "#FFA500", light: "#0000FF")
}
// Color from HEX
convenience init(r: UInt8, g: UInt8, b: UInt8, alpha: CGFloat = 1.0) {
let divider: CGFloat = 255.0
self.init(red: CGFloat(r)/divider, green: CGFloat(g)/divider, blue: CGFloat(b)/divider, alpha: alpha)
}
private convenience init(rgbWithoutValidation value: Int32, alpha: CGFloat = 1.0) {
self.init(
r: UInt8((value & 0xFF0000) >> 16),
g: UInt8((value & 0x00FF00) >> 8),
b: UInt8(value & 0x0000FF),
alpha: alpha
)
}
convenience init?(rgb: Int32, alpha: CGFloat = 1.0) {
if rgb > 0xFFFFFF || rgb < 0 {
return nil
}
self.init(rgbWithoutValidation: rgb, alpha: alpha)
}
convenience init?(hex: String, alpha: CGFloat = 1.0) {
var charSet = CharacterSet.whitespacesAndNewlines
charSet.insert("#")
let _hex = hex.trimmingCharacters(in: charSet)
guard _hex.range(of: "^[0-9A-Fa-f]{6}$", options: .regularExpression) != nil else {
return nil
}
var rgb: UInt32 = 0
Scanner(string: _hex).scanHexInt32(&rgb)
self.init(rgbWithoutValidation: Int32(rgb), alpha: alpha)
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()
于 2019-10-16T00:30:51.967 回答
0
你可以试试这个方法:
let view = UIView()
view.backdroundColor = UIColor(named: "Color")
let imageView = UIImageView()
imageView.image = UIImage(named: "Image")
从中等帖子中获得此信息
于 2020-04-20T19:51:06.027 回答