UITableViewCell
を継承するカスタムテーブルビューセルクラスを実装しました。テーブルビューには背景画像が含まれているため、セルの背景を透明にする必要があります。 iOS7以前は見栄えがいい。
ただし、iOS7では、セルは常に白い背景で表示されます。
2015年のXcode7でも、ストーリーボードのバグです:コード内のセルの背景色を設定する必要があります。
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を使用している場合は、何か問題があるかもしれません。 :)
少し調べてみると、セルのbackgroundColorがAppearanceシステムによって設定されていることがわかりました。したがって、アプリケーションのすべてのセルの背景が明確な場合、最も簡単な解決策は次のとおりです。
[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];
また、背景が異なっていても、クリアカラーはデフォルトの色として最も便利なようです。
セルを返す前に、これをcellForRowAtIndexPathメソッドに記述します。
cell.backgroundColor = [UIColor clearColor];
実際、問題はUITableViewの背景色がクリアに設定されていないことに起因することがわかりました。 UITableViewCellの背景色をクリアに変更しても、まだ白が表示されている場合は、UITableViewの背景色がクリア(または任意)に設定されていることを確認してください。
[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];
In Swift
tableView.backgroundView = nil
tableView.backgroundColor = UIColor.clearColor()
IOS 7のUITableViewCell
のデフォルトの背景色は白です。
コードのどこかにbackgroundColor
プロパティを設定する必要があります。たとえば、セルを新しく作成した後に設定します。
cell.backgroundColor = [UIColor clearColor];
これは間違いなくiOSのバグです。 iOS 8では、Interface Builder
での背景色の設定はiPhoneでは正常に機能しますが、iPadでは常にwhiteColor
です。これを修正するには、cellForIndexPath
データソースメッセージで、次のように入力します。
cell.backgroundColor = cell.backgroundColor
そして、それは動作します。これがまさにコードだからといってバグだと言った理由です。しかし、動作します。
UITableViewCellがデフォルトで選択されている可能性があります。Xcode6s new visual debugger を使用してこれを確認できます(または、この白いセルが表示される原因となっているビューを正確に見つけます)。
興味深いことに、これを知った後、選択したセルの背景色をクリア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;
}
上記のいずれもXCode 5.1.1、iOS 7.1で機能しないことがわかりました。
プロトタイプセルでInterface Builderを使用している場合は、プロトタイプセルを選択し、[表示]セクションの属性セレクターから、[背景]フォームのデフォルトを[クリアカラー]に変更します。
これはうまくいくようです。上記のコードを変更する必要もありません。これは純粋なIBソリューションです。
私にとっては、cell.backgroundColor = cell.contentView.backgroundColor;
またはtableView:willDisplayCell:forRowAtIndexPath:
でtableView:cell:forRowAtIndexPath:
を設定することでうまくいきました。
これは、必要に応じてInterface BuilderでcontentViewの背景色を設定したためです。
受け入れられた答えは私にとって問題を解決しませんでした。私はこれをしなければなりませんでした:
テーブルのデータソースクラスcellForRowAtIndexPathメソッドから:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
cell.backgroundColor = [UIColor clearColor]; //Make cell transparent
同様の問題がありました
これをコードに追加して修正します
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
}
Swift 1.2ソリューション:
セルの背景色の明示的な定義を次のように追加するだけです。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Configure the cell...
cell.backgroundColor = UIColor.clearColor()
return cell
}
UIオブジェクトをセルに追加すると、Xcode 5/IOS 7は新しい「コンテンツビュー」を追加します。これは、セル内のすべての要素のスーパービューになります。セルの背景色を設定するには、このコンテンツビューの背景色を設定します。上記のソリューションは私にとってはうまくいきませんでしたが、これは私にとってはうまくいきました。
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];
}