需求内容是无论是在浅色还是深色模式UIImageView都使用深色模式下的图片。最先想到的方法就是从Image Assets中按照下面方法取出对应的深色模式图片然后赋值给UIImageView的image属性:var darkTrait UITraitCollection(userInterfaceStyle: .dark)// 取出暗黑模式下图片let image UIImage(named: name, in: nil, compatibleWith: darkTrait)imageView.image image但是在浅色模式下UIImageView还是显示浅色模式下的图片。// 打印 image(lldb) po imageView.image▿ OptionalUIImage- some : UIImage:0x30ac59cc0 named(main: BDPPersonalPage_video_collection) {16, 16} renderingModeautomatic(original)// 打印 image 的 configuration(lldb) expression -l objc -O -- [0x30ac59cc0 configuration]0x0000000301439a00// 打印 configuration 的内容(lldb) expression -l objc -O -- 0x0000000301439a00UIImageConfiguration:0x301439a00 traits(UserInterfaceIdiom Pad, DisplayScale 2, DisplayGamut P3, HorizontalSizeClass Regular, VerticalSizeClass Regular, UserInterfaceStyle Light, UserInterfaceLayoutDirection LTR, PreferredContentSizeCategory L, AccessibilityContrast Normal)从上面imageView.image的configuration属性输出可以看到图片的UserInterfaceStyle还是Light。通过调试UIImageView的setImage:方法发现内部会调用下面的方法:-[UIImageView _resolveImagesWithPreviouslyDisplayedImage:]:_resolveImagesWithPreviouslyDisplayedImage:方法会获取UIImageView当前的traitCollection:0x19b688834 108: bl 0x199d49170 ; -[UIImageView _effectiveImageViewTraitCollectionForResolvingImages]在lldb输出可以看到UIImageView的UserInterfaceStyle是Light:(lldb) po $x0UITraitCollection: 0x17c7fa1c0; UserInterfaceIdiom Pad, DisplayScale 2, DisplayGamut P3, HorizontalSizeClass Regular, VerticalSizeClass Regular, UserInterfaceStyle Light, UserInterfaceLayoutDirection LTR, ForceTouchCapability Unavailable, PreferredContentSizeCategory L, AccessibilityContrast Normal, UserInterfaceLevel Base, HDRHeadroomUsageLimit 1, SceneCaptureState 0, ImageDynamicRange 1接着会比较UIImageView的traitCollection和要设置的图片的traitCollection是否相等:0x19b68884c 132: bl 0x19ad03818 ; -[UITraitCollection _isEqualToTraitCollectionForResolvingImage:]只有两者相等设置的图片才生效。这里由于UIImageView的UserInterfaceStyle为Light而要设置的图片的UserInterfaceStyle为Dark因此二者不相等。在二者不相等的情况下UIImageView会使用自己的traitCollection从Image Assets中找对应的图片:0x19b68898c 452: bl 0x19b68858c ; -[UIImageView _resolvedImageFromImage:withImageViewTrait:]由于UIImageView的UserInterfaceStyle是Light因此找到的也是Light图片。最后UIImageView会将找到的图片设置为真正要显示的图片。这就是为什么使用暗黑模式的图片设置UIImageView的image属性不成功的原因。知道了原因想要解决就只需要将保证UIImageView的UserInterfaceStyle和要设置的图片一样即可。imageView.overrideUserInterfaceStyle .dark加上上面代码UIImageView就可以正常显示暗黑模式的图片了。实际上设置了UIImageView的overrideUserInterfaceStyle属性为dark即使不设置UIImageView的image属性为暗黑模式图片系统也会自动切换到暗黑模式图片。