UITableViewの背景をクリア


90

私はiOS 7が正式にリリースされていないことを理解しているので、それについては議論しないでください。iOS 6では、テーブルビューは透明で見栄えが良かった。初めてiOS 7を実行し、背景は白です。

テーブルのbackgroundColor、セルの色などをUIColorのclearColorにしてみましたが、変更はありません。

この問題を解決する方法は?

テーブル


1
テーブルbackgroundViewをクリアなテーブルに設定してみましたか?
元に戻す

背景色を設定しているコードを教えてください。親ビューはどうですか?おそらくテーブルビューの背景ははっきりしていますが、親はそうではありませんか?
sooper 2013

私はこれと同じことに気づきましたが、現在のバージョンより前のバージョンのiOS 7.0と同じアプリをインストールしたとき、それは起こりませんでした。この問題はxCode5.0にありますか?
Totumus Maximus 2013

回答:


123
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

cellForRowAtIndexPath内

また、テーブルビューの背景が透明(ストーリーボード内)であることを確認してください。 ここに画像の説明を入力してください


ジョージ、コードをメソッド内に追加-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
IanStallings

1
場合によっては、selectedBackgroundViewが本当に必要な場合は、cellForRowAtIndexPathに次の行を追加できます。またはawakeFromNibでも:self.selectedBackgroundView = ...注:self.backgroundColor = [UIColor clearColor]; iOS7のawakeFromNibでは機能しません。しかし:cell.backgroundColor = [UIColor clearColor]; iOS 7.0のcellForRowAtIndexPathでのみ適切に機能します
スラマー

11
行を追加するだけです:cell.backgroundColor = [UIColor clearColor];
evya 2013

これは、charm cell.backgroundColor = [UIColor clearColor]のように機能します。
bpolat 2013年

Swiftでこれを行う方法は?
カディールフセイン2015

58

これを入れてください:

cell.backgroundColor = [UIColor clearColor];

このセクションで:

cellForRowAtIndexPath

1
IOSの6では、設定するのに十分であるbackgroundView空のビューに、この追加のコードは、IOSの7のために必要とされる
ケビン罫線

25

最初にbackgroundViewをnilに設定してみてください。

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

これがiOS7でのドキュメントの変更なのか、それとも常にそこにあり、背景色に影響しなかったのかはわかりませんが、UITableViewクラスリファレンス@property backgroundView

「テーブルビューの背景色を設定するには、このプロパティをnilに設定する必要があります。」

編集:修正されたコード構文


25

これは答えられましたが、多くの点で間違っています。

以下のデリゲートメソッドを実装する必要があります。

    - (void)tableView:(UITableView *)tableView  willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
}

cellForRowAtIndexPathに修正を入れることはできません。これは、セルがレンダリングされた後であり、背景がクリアに設定される前に(遅いデバイスで)白い背景が点滅します。

このデリゲートメソッドを使用すると、問題が解決します。


1
はい。iOS 7の場合、これは背景をクリアする方法です。上記の他の提案はすべて機能しない可能性があります。
girish_vr 14

15

実際には、公式に正しいセルの背景色を変更する場所は、ドキュメント(UITableViewCell Class Reference)によって異なります

定義済みのセルを使用してもカスタムのセルを使用しても、backgroundViewプロパティを使用するか、継承されたbackgroundColorプロパティを変更することにより、セルの背景を変更できます。iOS 7では、セルのデフォルトの背景は白です。以前のバージョンのiOSでは、セルは外側のテーブルビューの背景色を継承します。セルの背景色を変更する場合は、テーブルビューデリゲートのtableView:willDisplayCell:forRowAtIndexPath:メソッドで変更します。


私はこれを試していますが、最初に表示されたセルはすべて白い背景です。スクロールして新しいセルを作成すると、必要な背景が透明になります。他に何を試すべきかわからない...
David Dunham 2013年

気にしないでください、それはタイミングの問題のようです。私はawakeFromNibで何かをしていましたが、それは早すぎました。
David Dunham 2013年


6

これは非常にイライラする問題です。これが私の現在の解決策です:

これをUITableViewCellサブクラスに追加します。

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

ああ、神様。ありがとうございました。私の夜を救った。あなたの答えは受け入れられたはずです。
Michal Shatz、2015年

5

これは私にとってiOS7以降で機能しました:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

そして次に cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];


4

これは、各セルのクリアな背景色とテーブル自体のクリアな色を編集したときにのみ機能しました。両方ともプログラム的に

テーブルのクリアカラーを設定するには:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

セルの色を設定するには:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}

3

素敵なこと。UITableのデフォルトの色は白のようです(理由はわかりません)

背景白

しかし、それを変更するほうがよい。


パーフェクト!それは失われた平和でした。追加のコード行は必要ありません!
Morpheus78 2016

3

最初のセット

tableView.backgroundColor = [UIColor clearColor];

セカンドセット

tableCell.backgroundColor = [UIColor clearColor];

3

テーブルビュー用のIBアウトレットを作成します@IBOutlet弱い変数yourTable:UITableView!

ビューの負荷

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

セルの色をクリアしたい場合もこれを行います

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.backgroundColor = UIColor.clearColor() 

}

2

私のアプリでは、私が設定しなければならなかったbackgroundColor私の上UITableViewCellにクラスを[UIColor clearColor]私が更新されたときに色iOS 7


2

試す

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

そして

cell.backgroundColor = [UIColor clearColor];

2

私の場合、セルはxibを使用して作成されました。xcode5のインターフェイスビルダーで、clearColorをcell.backgroundColorに設定できないようです。

私がする必要があるすべては確かに設定することでした

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}

コントロールが非void関数の終わりに達する
ropo '24年


2

迅速3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}

1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];

0

セットする

tableView.backgroundColor = [UIColor clearColor];

viewDidLoadで。

これが機能しない場合は、以下を試してください。

tableView.backgroundView = nil;

0

迅速に3

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.