web-dev-qa-db-ja.com

UITableViewCellは白い背景を表示し、iOS7では変更できません

UITableViewCellを継承するカスタムテーブルビューセルクラスを実装しました。テーブルビューには背景画像が含まれているため、セルの背景を透明にする必要があります。 iOS7以前は見栄えがいい。

ただし、iOS7では、セルは常に白い背景で表示されます。


2015年のXcode7でも、ストーリーボードのバグです:コード内のセルの背景色を設定する必要があります。

186
Kjuly

Apple DOCが言ったように( ITableViewCell Class Reference ):

...iOS 7では、セルのデフォルトの背景は白です; iOSの以前のバージョンでは、セルは囲んでいるテーブルビューの背景色を継承します。セルの背景色を変更する場合は、tableView:willDisplayCell:forRowAtIndexPath:テーブルビューデリゲートのメソッド。

したがって、透明な背景を持つセルを表示するには、以下のようにTable View Controllerでデリゲートメソッドを実装するだけです。

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

注意事項:@nullが言ったように、 "...インターフェースビルダーにバグがあるようです..." 、バグがあるかどうかは完全にはわかりませんが、彼のコメントが複数の賛成票を得たようです。したがって、IBを使用している場合は、何か問題があるかもしれません。 :)

383
Kjuly

少し調べてみると、セルのbackgroundColorがAppearanceシステムによって設定されていることがわかりました。したがって、アプリケーションのすべてのセルの背景が明確な場合、最も簡単な解決策は次のとおりです。

[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];

また、背景が異なっていても、クリアカラーはデフォルトの色として最も便利なようです。

66
Anton Filimonov

セルを返す前に、これをcellForRowAtIndexPathメソッドに記述します。

cell.backgroundColor = [UIColor clearColor];
30
sanjana

実際、問題はUITableViewの背景色がクリアに設定されていないことに起因することがわかりました。 UITableViewCellの背景色をクリアに変更しても、まだ白が表示されている場合は、UITableViewの背景色がクリア(または任意)に設定されていることを確認してください。

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

In Swift

tableView.backgroundView = nil
tableView.backgroundColor = UIColor.clearColor()
13
Endama

IOS 7のUITableViewCellのデフォルトの背景色は白です。

コードのどこかにbackgroundColorプロパティを設定する必要があります。たとえば、セルを新しく作成した後に設定します。

cell.backgroundColor = [UIColor clearColor];
13
Yiming Tang

これは間違いなくiOSのバグです。 iOS 8では、Interface Builderでの背景色の設定はiPhoneでは正常に機能しますが、iPadでは常にwhiteColorです。これを修正するには、cellForIndexPathデータソースメッセージで、次のように入力します。

cell.backgroundColor = cell.backgroundColor

そして、それは動作します。これがまさにコードだからといってバグだと言った理由です。しかし、動作します。

10
superarts.org

UITableViewCellがデフォルトで選択されている可能性があります。Xcode6s new visual debugger を使用してこれを確認できます(または、この白いセルが表示される原因となっているビューを正確に見つけます)。

enter image description here

興味深いことに、これを知った後、選択したセルの背景色をクリアstillに設定しても機能しませんでした。このカスタムセルを作成するときに選択スタイルを変更する必要がありました。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // do customization here
    }
    self.selectionStyle = UITableViewCellSelectionStyleNone;
    [self setBackgroundColor:[UIColor clearColor]];
    return self;
}
4
abbood

上記のいずれもXCode 5.1.1、iOS 7.1で機能しないことがわかりました。

プロトタイプセルでInterface Builderを使用している場合は、プロトタイプセルを選択し、[表示]セクションの属性セレクターから、[背景]フォームのデフォルトを[クリアカラー]に変更します。

enter image description here

これはうまくいくようです。上記のコードを変更する必要もありません。これは純粋なIBソリューションです。

3
Mike

私にとっては、cell.backgroundColor = cell.contentView.backgroundColor;またはtableView:willDisplayCell:forRowAtIndexPath:tableView:cell:forRowAtIndexPath:を設定することでうまくいきました。

これは、必要に応じてInterface BuilderでcontentViewの背景色を設定したためです。

2
mllm

受け入れられた答えは私にとって問題を解決しませんでした。私はこれをしなければなりませんでした:

  1. インターフェイスビルダーで、テーブルビューを選択します。次に、属性インスペクターからViewセクションで、Backgroundを透明(不透明度0%)に設定します。

enter image description here

  1. テーブルのデータソースクラスcellForRowAtIndexPathメソッドから:

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
        reuseIdentifier:CellIdentifier];
    cell.backgroundColor = [UIColor clearColor]; //Make cell transparent
    
2
RajV

同様の問題がありました

  1. SelectionStyleとして青を設定し、
  2. これをコードに追加して修正します

    override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    
      var bgColorView: UIView = UIView()
      bgColorView.backgroundColor = UIColor(red: (76.0 / 255.0), green: (161.0 / 255.0), blue: (255.0 / 255.0), alpha: 1.0)
      bgColorView.layer.masksToBounds = true
      tableView.cellForRowAtIndexPath(indexPath)!.selectedBackgroundView = bgColorView
      return true
    }
    
1
Nakul Sudhakar

Swift 1.2ソリューション:

セルの背景色の明示的な定義を次のように追加するだけです。

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

    // Configure the cell...
    cell.backgroundColor = UIColor.clearColor()

    return cell
}
1
Dan Beaulieu

UIオブジェクトをセルに追加すると、Xcode 5/IOS 7は新しい「コンテンツビュー」を追加します。これは、セル内のすべての要素のスーパービューになります。セルの背景色を設定するには、このコンテンツビューの背景色を設定します。上記のソリューションは私にとってはうまくいきませんでしたが、これは私にとってはうまくいきました。

1
DrBug

UITableViewセルを有利にするために、カラーコードを使用することもできます。

[cell setBackgroundColor:[self colorWithHexString:@"1fbbff"]];

これは、カラーコードメソッドを適用するためのコードです。

-(UIColor*)colorWithHexString:(NSString*)hex
{
    NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];


    if ([cString length] < 6) return [UIColor grayColor];

    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];

    if ([cString length] != 6) return  [UIColor grayColor];

    NSRange range;
    range.location = 0;
    range.length = 2;
    NSString *rString = [cString substringWithRange:range];

    range.location = 2;
    NSString *gString = [cString substringWithRange:range];

    range.location = 4;
    NSString *bString = [cString substringWithRange:range];

    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];

    return [UIColor colorWithRed:((float) r / 255.0f)
                         green:((float) g / 255.0f)
                          blue:((float) b / 255.0f)
                         alpha:1.0f];
}
0