.xib
ファイルにカスタムUITableViewCells
があります。 Xcode 11 Beta 5(Beta 6でもテスト済み)以降、私のUILabels
はダークモードを無視し、テキストは常に黒になります。 UILabel
テキストの色をデフォルト(ラベルの色)に設定したので、これは自動的に変更されます。誰かが間違っているアイデアを持っていますか?
これがスクリーンショットです。最初のセルは基本セルで、2番目のセルは.xib
ファイルのカスタムセルです。
これはXcode 11のバグのようです(ベータ7およびGM Seed 1)でテスト済み)-Appleフィードバックアシスタント経由(FB7198213)問題は fixed in Xcode 11 GM Seed 2。
Xcode 11の以前のバージョンの場合、動的ラベルの色の不正な動作の回避策は、テーブルビューのセルサブクラスのawakeFromNib()
でラベルの色を再割り当てすることです。例えば。:
class TableCell: UITableViewCell {
@IBOutlet private weak var label: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
if #available(iOS 13.0, *) {
// The label's textColor was set to secondaryLabel in the XIB editor
// but we reassign it to secondaryLabel again here. This prevents
// a bug where the label always appears in its light mode variant.
label.textColor = .secondaryLabel
}
}
}
元の回答:この元の回答は、デフォルトの(つまり、プライマリ)ラベルの色についてのみ問題に対処します
ラベルの色の編集に関して、Xcode 11(ベータ7でテスト済み)のXIBeditorにバグがあるようです。 XIBエディターでラベルの色が「ラベルの色」に設定されている場合(既に設定されている場合でも)、基礎となるXMLが変更され、暗いモードでもラベルが黒く表示されます。新しいラベルの作成とそのラベルの色を明示的に「Label Color」に設定した後のXIBファイルの差異を調べると、違いがわかります。
私の簡単な例では、XIBファイルのXMLは次のとおりです。
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text here" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VKH-gX-gtO">
<rect key="frame" x="20" y="15" width="71" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
に:
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text here" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VKH-gX-gtO">
<rect key="frame" x="20" y="15" width="71" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="highlightedColor"/>
</label>
行<nil key="textColor"/>
除去された。これを手動で追加すると、ダークモードでのラベルの動作が修正されます。
ここで同様の問題。 XIBで使用される一部のダイナミックカラーは、ダークモードが有効になっている場合、ダークバージョンを使用しません。
これは、シミュレータと実際のデバイスの両方で発生します。色doは、Xcode(Interface Builder)内でダークモードをシミュレートすると正しく表示されます。
プロジェクトの展開ターゲットはiOS 10です。
Xcode 11 GM Seed 2で問題が修正されたようです。
リリースノート から:
IOS 13.0より前にデプロイするように設定されたXIBファイルのシステムカラーが、実行時にシステムの外観に適合しない問題を修正しました。 (54362252)
@Andrew Bennetこれは私のために働いた。ありがとうございました。アプリケーションのこの部分はまだObjective-Cにあるため、Objective-Cで回避策を実装する必要がありました。
- (void)awakeFromNib {
[super awakeFromNib];
if (@available(iOS 13.0, *)) {
// The label's textColor was set to secondaryLabel in the XIB editor
// but we reassign it to secondaryLabel again here. This prevents
// a bug where the label always appears in its light mode variant.
// label.textColor = .secondaryLabel
lblTitle.textColor = UIColor.secondaryLabelColor;
}
}