web-dev-qa-db-ja.com

.xibファイルのUITableViewCellのUILabelがダークモードを無視する

.xibファイルにカスタムUITableViewCellsがあります。 Xcode 11 Beta 5(Beta 6でもテスト済み)以降、私のUILabelsはダークモードを無視し、テキストは常に黒になります。 UILabelテキストの色をデフォルト(ラベルの色)に設定したので、これは自動的に変更されます。誰かが間違っているアイデアを持っていますか?

これがスクリーンショットです。最初のセルは基本セルで、2番目のセルは.xibファイルのカスタムセルです。

enter image description here

14
patrickS

これは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"/> 除去された。これを手動で追加すると、ダークモードでのラベルの動作が修正されます。

13
Andrew Bennet

ここで同様の問題。 XIBで使用される一部のダイナミックカラーは、ダークモードが有効になっている場合、ダークバージョンを使用しません。

これは、シミュレータと実際のデバイスの両方で発生します。色doは、Xcode(Interface Builder)内でダークモードをシミュレートすると正しく表示されます。

プロジェクトの展開ターゲットはiOS 10です。

3
Loïc Gardiol

Xcode 11 GM Seed 2で問題が修正されたようです。

リリースノート から:

IOS 13.0より前にデプロイするように設定されたXIBファイルのシステムカラーが、実行時にシステムの外観に適合しない問題を修正しました。 (54362252)

1
Alfred Woo

@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;
    }
}
0
Larry Ricker