某些 UI 设置无法在暗/亮模式下自动工作,因为UIColor. 例如shadow在图层中。因为我需要在明暗模式下删除和放置阴影,所以我需要在某个地方放置updateShadowIfNeeded()函数。我知道如何检测当前的模式:
func dropShadowIfNeeded() {
switch traitCollection.userInterfaceStyle {
case .dark: removeShadow()
case .light: dropShadowIfNotDroppedYet()
default: assertionFailure("Unknown userInterfaceStyle")
}
}
Run Code Online (Sandbox Code Playgroud)
现在我把这个函数放在 里面layoutSubviews,因为每次外观改变时它都会被调用:
override func layoutSubviews() {
super.layoutSubviews()
dropShadowIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)
但是这个函数被调用了很多。只有在userInterfaceStyle更改时才触发的正确功能是什么?
我想在用户从默认模式切换到黑暗模式时更改状态栏应用程序图标,反之亦然(使用Swift 3).这是我到目前为止所拥有的:
func applicationDidFinishLaunching(_ aNotification: Notification) {
DistributedNotificationCenter.default().addObserver(self, selector: #selector(darkModeChanged(sender:)), name: "AppleInterfaceThemeChangedNotification", object: nil)
}
...
func darkModeChanged(sender: NSNotification) {
print("mode changed")
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有用.我究竟做错了什么?
observers selector nsnotificationcenter swift nsdistributednotification
我在这里发现了一些与我遇到的问题相关的问题,但由于我对 iOS 开发还很陌生,我不确定人们如何/在哪里实施他们的解决方案。由于我也是 StackOverflow 的新手,我无法对他们的帖子发表评论,因此我们将不胜感激。
如何检测 iOS 13 中的 Light\Dark 模式变化?
我有一个 collectionView,当我切换到暗模式和从暗模式切换时,单元格的边框颜色正在更改为黑色,而不是它应该基于我分配给它的 systemGray 颜色的颜色。
在我上面链接的答案中,人们建议使用 layoutSubviews() 和/或 traitCollectionDidChange() 但我不确定在哪里实现这些功能。我似乎无法在 UIViewController 或 UICollectionView 的定义中找到这些函数。
当我使用 reloadData() 重新加载视图时,颜色会更改为它们应有的颜色,但我想知道何时/何处调用 layoutSubviews() 和/或 traitCollectionDidChange() 函数。