gav*_*ido 2 swift ios13 ios-darkmode
我在这里发现了一些与我遇到的问题相关的问题,但由于我对 iOS 开发还很陌生,我不确定人们如何/在哪里实施他们的解决方案。由于我也是 StackOverflow 的新手,我无法对他们的帖子发表评论,因此我们将不胜感激。
如何检测 iOS 13 中的 Light\Dark 模式变化?
我有一个 collectionView,当我切换到暗模式和从暗模式切换时,单元格的边框颜色正在更改为黑色,而不是它应该基于我分配给它的 systemGray 颜色的颜色。
在我上面链接的答案中,人们建议使用 layoutSubviews() 和/或 traitCollectionDidChange() 但我不确定在哪里实现这些功能。我似乎无法在 UIViewController 或 UICollectionView 的定义中找到这些函数。
当我使用 reloadData() 重新加载视图时,颜色会更改为它们应有的颜色,但我想知道何时/何处调用 layoutSubviews() 和/或 traitCollectionDidChange() 函数。
如果您想了解如何在 iOS 13 中实现暗模式,我建议您观看此wwdc 视频。但是,如果您只想快速了解调用方法的时间,这里有一个总结:
layoutSubviews():layoutSubviews方法用于UIView子类。您可以在自己的UIView子类中覆盖它,如下所示:
class CustomCollectionView: UICollectionView {
override func layoutSubviews() {
super.layoutSubviews()
// your implementation here
}
}
Run Code Online (Sandbox Code Playgroud)
traitCollectionDidChange():可以为子类覆盖traitCollectionDidChange方法UIViewController。您可以在自己的UIViewController子类中覆盖它,如下所示:
class CustomViewController: UIViewController {
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
// your implementation here.
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想特别知道主题何时发生变化,那么您的实现traitCollectionDidChange将类似于:
public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if #available(iOS 13, *), traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
// handle theme change here.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2948 次 |
| 最近记录: |