問題タブ [uitraitcollection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - UITraitCollection の hasDifferentColorAppearance(comparedTo:) 結果の評価
私のアプリでは、iOS システムのダーク モード設定が変更されたときに、カスタム UI を変更する必要があります。https://developer.apple.com/videos/play/wwdc2019/214/によるとtraitCollectionDidChange
、 を使用して以前と現在の特性コレクションを実装して比較することが明示的に言及されていhasDifferentColorAppearance(comparedTo:)
ます。
ドキュメントには次のように記載されています。
このメソッドを使用して、現在の環境の特性を変更するとインターフェイスの色も変更されるかどうかを判断します。たとえば、userInterfaceStyle または accessibilityContrast プロパティを変更すると、通常、インターフェイスの色が変更されます。
実装したView Controllerのサブクラスで
しかし、場合によっては、 ifも を返すとは予想していなかった とisSameUserInterfaceStyle
の両方がisSameAcessibilityContrast
評価されます。私は Apple が提案する API の使用法を回避するのは好きではありませんが、UIが実際に変更されていない場合は不要な変更を加えたくありません。したがって、結果に頼るべきか、それとも両方の特性コレクションを比較するだけで十分かはわかりません。true
hasDifferentColorAppearance(comparedTo:)
true
userInterfaceStyle
hasDifferentColorAppearance(comparedTo:)
userInterfaceStyle
swiftui - iOS 13 で Light\Dark モードの変更を検出する方法は?
一部の UI セットアップは、ダーク/ライト モードの変更で自動的に機能しませんUIColor
。たとえばshadow
レイヤーで。ダークモードとライトモードでシャドウを削除してドロップする必要があるため、updateShadowIfNeeded()
機能を配置する場所が必要です。現在のモードを検出する方法を知っています:
layoutSubviews
外観が変わるたびに呼び出されるため、関数を の中に入れました。
しかし、この関数はA LOTと呼ばれています。userInterfaceStyle
変更された場合にのみトリガーする適切な機能は何ですか?
uicolor - iOS13: アセット カタログで昇格したユーザー インターフェイス レベルの色を指定する方法
iOS 13 は、 またはUIUserInterfaceLevel
のいずれ.base
かになります.elevated
。UIView
システムは、ダーク モードで高いレベルが使用されたときに提供される色を自動的に調整するようです。
しかし、アセット カタログ.elevated
で手動で色を指定する方法はないようです。
それを行う唯一の方法は、新しい UIColor コンストラクターを使用することです。