web-dev-qa-db-ja.com

iPadでUITableView backgroundColorは常に白

私はプロジェクトに取り組んでいます。クリアカラーとして設定されているUITableViewsがたくさんあります。ビューの背景色は私のカスタム色に設定されており、すべてが正常ですiPhone

問題はiPadで発生します!私はほとんどすべてを試しましたが、私のUITableViewは白色です。

iPadではUITableView backgroundColorは常に灰色ですなどの他のトピックを確認しましたが、何も機能しませんでした。また、私の問題は灰色ではなく、雪のように白いです!

その理由は何でしょうか?

74
Göktuğ Aral

グッドニュース:リリースノートによると、iOS 10の場合:

IPadで実行する場合、ストーリーボードのUITableViewCellに設定された背景色が尊重されるようになりました。

バージョン<10:の場合

IOS 8(8.3)でこれを見ていました。 IBでは、私のセルは「クリアカラー」で、コンテンツビューは「クリアカラー」でしたが、白としてレンダリングされます。 IBから値を取得するため、不完全ではあるが合理的なソリューションです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    cell.backgroundColor = cell.contentView.backgroundColor;
    return cell;
}

キューから外された再利用可能なセルは、iPadで背景が白になります。これは、ビュー階層デバッガーを使用して確認できました。

これを行うと、テーブルの背景色を使用でき、背景ビューを設定する必要はありませんでしたが、それでも同様に機能します。

124
Ben Flynn

これを修正するには、appDelegateファイルに外観API設定を作成します。

迅速:

UITableViewCell.appearance().backgroundColor = UIColor.clearColor()
38
Kiko Lobo

背景色を設定する代わりに、次のように、代わりに背景ビューを使用してみてください。

- (void)viewDidLoad {
    self.tableView.backgroundView = [UIView new];
    self.tableView.backgroundView.backgroundColor = [UIColor clearColor];
}

BackgroundColorを使用しても必ずしも効果が得られないという問題がありましたが、代わりに背景ビューを設定するとうまくいきます。

19
John Stephen

Ben Flynnの答えから構築... cell.contentViewの背景色は、必ずしもcell.background色と同じではありません。その場合、私はこれがより多くの状況でiPadの白い背景の問題を解決するのに役立つことを発見しました:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        ...
        cell.backgroundColor = cell.backgroundColor;
        return cell;
    }

声明はばかげていると狂気に見える間...それは問題を解決します。

12
Ray W

内部に多くの異なるセルを含むテーブルビューがあり、各セルの色は異なります。

@Ben Flynnからの回答cell.backgroundColor = self.contentView.backgroundColorそれを達成することはできません。その理由は self.contentView.backgroundColorはnilなので、あなたがしたことはcell.backgroundColor = nil

基本的には、Xcodeのバグです(そうだと思います!)、cell.backgroundColorはまだ色を持っていますが、表示できません。

@Ray Wの回答に基づいてしばらくデバッグした後、ここに私の解決策があります。

@impelement YouCustomCellClass

- (void)awakeFromNib {
    [super awakeFromNib];
    self.backgroundColor = self.backgroundColor; // What the heck?? But it is.
}

@end
10
nahung89

これは私のためにこの問題を解決します

 func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    tableView.backgroundColor = UIColor.clear
}
5
Ram

私の経験では、iOSの一部のバージョンは、デリゲートのtableView:willDisplayCell:forRowAtIndexPath:。そのメソッドでカスタムカラーにリセットすると、修正されます。

Swift 3.XX

これを入れて

UITableViewCell.appearance().backgroundColor = UIColor.clear

AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
2
Abhishek Mitra

Swift 3.1

UITableViewCellサブクラスにこれを配置することで、このバグを回避しました。

セルがNIBファイルからロードされている場合:

override func awakeFromNib() {
    super.awakeFromNib()
    self.backgroundColor = UIColor.clear
}

セルがシステムによって再利用されているとき

override func prepareForReuse() {
    super.prepareForReuse()
    self.backgroundColor = UIColor.clear
}

animeshporwalのように、iOS 10はInterface Builderでこの問題を修正することになっています。

1
Xavi Moll

StoryboardUITableViewControlrsを使用しているため、最も簡単な決定はすべてのコントローラーをサブクラス化し、このメソッドを親に追加することでした

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
        cell.backgroundColor = [UIColor clearColor];
    }
}
1
d.rozumeenko

スイフト

これは私にも起こっていました。 SWRevealViewControllerのテーブルビューは、iPhoneではっきりと見えたときにiPadで白く見えました(これが背景画像でそれが欲しかった方法です)。上記のすべてを試してみましたが、これが私のviewDidLoad()で機能することになりました。

tableView.backgroundView = UIImageView(image: UIImage(named: "gray"))
tableView.backgroundView?.backgroundColor = .clearColor()
UITableViewCell.appearance().backgroundColor = .clearColor()
1
A.J. Hernandez

この問題が発生したので、(tableViewの1つではなく)ビューのbackgroundColorを変更して修正しました。 iPadで最初に使用されるのはiPadのようで、私の場合は白に設定されています。

0
Diego Rebosio

Swiftこの問題もありました。 .phoneでは正常に動作しますが、tableViewCellsは.padでは白くなります。 Swiftを使用してどのように修正したかを示すと思いました。

以下のように、tableViewCellを@IBOutletとしてviewController.Swiftに接続します。

    @IBOutlet weak var tvc1: UITableViewCell!
    @IBOutlet weak var tvc2: UITableViewCell!
    @IBOutlet weak var tvc3: UITableViewCell!

次に、viewDidLoadに以下を追加します。

tvc1.backgroundColor = tvc1.backgroundColor
tvc2.backgroundColor = tvc2.backgroundColor
tvc3.backgroundColor = tvc3.backgroundColor

ここで何が起きているのかわかりませんが、これで解決しました。

0
Steve

これは、ストーリーボードで次のように実現できます。

  • ストーリーボードのドキュメントアウトラインを表示する
  • テーブル内で、TableViewCellを選択します
  • そのセル内のコンテンツビューに移動します
  • コンテンツビューの背景色を設定します。

結果:iPadとiPhoneのシミュレータービューは同じように見えます

0
Mark80

半透明のテーブルビューセルを持つ透明なテーブルビューがあります。テーブルを作成するときに、テーブルビューの背景色をクリアに設定します。これは、背景色が白のままであるiPad + iOS 8を除く、すべてのiOS /デバイスの組み合わせで機能します。

私にとっては、セルの背景色を半透明に設定し、コンテンツビューの背景色をクリアに設定すると、tableView(_ tableView: UITableView, cellForRowAt indexPath)ごとに行うので機能します。私にとっての問題は、テーブルビューの背景が白のままであることだけでした。

この問題に関して見つけたすべての組み合わせを試しましたが、実際に必要なことは、各tableView(_ tableView: UITableView, cellForRowAt indexPath)table views backgroundを透明に設定することだけでした。非常に直感的ではありませんが、少なくとも機能します。 :P

0
Daniel Saidi

UIKit notesの下のリリースノートに記載されているように、これはiOS 10 Beta 4で修正されたようです。

enter image description here

0
Animesh Porwal