私はプロジェクトに取り組んでいます。クリアカラーとして設定されているUITableView
sがたくさんあります。ビューの背景色は私のカスタム色に設定されており、すべてが正常ですiPhone。
問題はiPadで発生します!私はほとんどすべてを試しましたが、私のUITableView
は白色です。
iPadではUITableView backgroundColorは常に灰色ですなどの他のトピックを確認しましたが、何も機能しませんでした。また、私の問題は灰色ではなく、雪のように白いです!
その理由は何でしょうか?
グッドニュース:リリースノートによると、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で背景が白になります。これは、ビュー階層デバッガーを使用して確認できました。
これを行うと、テーブルの背景色を使用でき、背景ビューを設定する必要はありませんでしたが、それでも同様に機能します。
これを修正するには、appDelegateファイルに外観API設定を作成します。
迅速:
UITableViewCell.appearance().backgroundColor = UIColor.clearColor()
背景色を設定する代わりに、次のように、代わりに背景ビューを使用してみてください。
- (void)viewDidLoad {
self.tableView.backgroundView = [UIView new];
self.tableView.backgroundView.backgroundColor = [UIColor clearColor];
}
BackgroundColorを使用しても必ずしも効果が得られないという問題がありましたが、代わりに背景ビューを設定するとうまくいきます。
Ben Flynnの答えから構築... cell.contentViewの背景色は、必ずしもcell.background色と同じではありません。その場合、私はこれがより多くの状況でiPadの白い背景の問題を解決するのに役立つことを発見しました:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
cell.backgroundColor = cell.backgroundColor;
return cell;
}
声明はばかげていると狂気に見える間...それは問題を解決します。
内部に多くの異なるセルを含むテーブルビューがあり、各セルの色は異なります。
@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
これは私のためにこの問題を解決します
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
tableView.backgroundColor = UIColor.clear
}
私の経験では、iOSの一部のバージョンは、デリゲートのtableView:willDisplayCell:forRowAtIndexPath:
。そのメソッドでカスタムカラーにリセットすると、修正されます。
Swift 3.XX
これを入れて
UITableViewCell.appearance().backgroundColor = UIColor.clear
AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
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でこの問題を修正することになっています。
Storyboard
でUITableViewControlrs
を使用しているため、最も簡単な決定はすべてのコントローラーをサブクラス化し、このメソッドを親に追加することでした
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
cell.backgroundColor = [UIColor clearColor];
}
}
スイフト
これは私にも起こっていました。 SWRevealViewControllerのテーブルビューは、iPhoneではっきりと見えたときにiPadで白く見えました(これが背景画像でそれが欲しかった方法です)。上記のすべてを試してみましたが、これが私のviewDidLoad()で機能することになりました。
tableView.backgroundView = UIImageView(image: UIImage(named: "gray"))
tableView.backgroundView?.backgroundColor = .clearColor()
UITableViewCell.appearance().backgroundColor = .clearColor()
この問題が発生したので、(tableViewの1つではなく)ビューのbackgroundColorを変更して修正しました。 iPadで最初に使用されるのはiPadのようで、私の場合は白に設定されています。
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
ここで何が起きているのかわかりませんが、これで解決しました。
これは、ストーリーボードで次のように実現できます。
結果:iPadとiPhoneのシミュレータービューは同じように見えます
半透明のテーブルビューセルを持つ透明なテーブルビューがあります。テーブルを作成するときに、テーブルビューの背景色をクリアに設定します。これは、背景色が白のままであるiPad + iOS 8を除く、すべてのiOS /デバイスの組み合わせで機能します。
私にとっては、セルの背景色を半透明に設定し、コンテンツビューの背景色をクリアに設定すると、tableView(_ tableView: UITableView, cellForRowAt indexPath)
ごとに行うので機能します。私にとっての問題は、テーブルビューの背景が白のままであることだけでした。
この問題に関して見つけたすべての組み合わせを試しましたが、実際に必要なことは、各tableView(_ tableView: UITableView, cellForRowAt indexPath)
でtable views backgroundを透明に設定することだけでした。非常に直感的ではありませんが、少なくとも機能します。 :P