我在这里找到了几个与我所遇到的问题有关的问题,但是由于我对iOS开发还很陌生,所以我不确定人们如何/在何处实施他们的解决方案。由于我也是StackOverflow的新手,因此我无法评论他们的帖子,因此将不胜感激。
Detecting iOS Dark Mode Change
How to detect Light\Dark mode change in iOS 13?
我有一个collectionView,当我在暗模式下切换时,单元的borderColor会更改为看起来像黑色而不是颜色,它应该基于我分配给它的systemGray颜色。
在我上面链接的答案中,有人建议使用layoutSubviews()和/或traitCollectionDidChange(),但我不确定在哪里实现这些功能。我似乎在UIViewController或UICollectionView的定义中找不到函数。
当我使用reloadData()重新加载视图时,颜色会更改为应有的颜色,但是我想知道何时/何处调用layoutSubviews()和/或traitCollectionDidChange()函数。
答案 0 :(得分:5)
如果您想了解如何在iOS 13中实现暗模式,建议您观看wwdc video。但是,如果您只是想快速了解何时调用这些方法,请参见以下摘要:
layoutSubviews()
:layoutSubviews方法适用于UIView
子类。您可以像这样在自己的UIView
子类中覆盖它:
class CustomCollectionView: UICollectionView {
override func layoutSubviews() {
super.layoutSubviews()
// your implementation here
}
}
traitCollectionDidChange()
:UIViewController
子类可以覆盖traitCollectionDidChange方法。您可以像这样在自己的UIViewController
子类中覆盖它:
class CustomViewController: UIViewController {
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
// your implementation here.
}
}
如果您想特别知道主题何时更改,那么traitCollectionDidChange
的实现将类似于:
public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if #available(iOS 13, *), traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
// handle theme change here.
}
}