iPadでUITableView backgroundColorが常に灰色


128

をに設定するbackgroundColorと、UITableViewiPhone(デバイスとシミュレータ)では問題なく機能しますが、iPadシミュレータでは機能しません。代わりに、を含めて設定したすべての色に明るい灰色の背景が表示されますgroupTableViewBackgroundColor

再現する手順:

  1. 新しいナビゲーションベースのプロジェクトを作成します。
  2. RootViewController.xibを開き、テーブルビューのスタイルを「グループ化」に設定します。
  3. このレスポンダをRootViewControllerに追加します。

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. Simulator SDK 3.2を選択し、ビルドして実行します。
  5. 黒の背景(デバイスとシミュレータ)が表示されます。
  6. プロジェクトツリーでターゲットを選択します。
  7. プロジェクトをクリックします:iPadの現在のターゲットをアップグレードします。
  8. ビルドして実行します。
  9. 明るい灰色の背景になります。
  10. テーブルビューのスタイルを[プレーン]に戻すと、背景が黒くなります。

ご協力いただきありがとうございます!


2
ああ、今、iPhone6とiPadが再びiOS6に配置されました:-)
Gerd

3
あまり使用されない「再現手順」という用語を使用するためのブラボー!:-p
コンスタンチノツァロウは

回答:


245

これらのいずれかを試してください。

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];

3
副作用があるかどうかはわかりませんが、効果はあります。ありがとう!self.tableView.backgroundView = nil;
rjobidon 2010

30
非常に重要:これはSDK 3.2でのみ機能します。3.1.3との下位互換性のため。以前は、テーブルビューがbackgroundViewプロパティに応答するかどうかを確認する必要があります。そうしないと、アプリがクラッシュして突然終了し、私を信頼できます!
rjobidon

1
はい、上記の解決策を試しましたが、うまくいきました。誰もがこの問題が実際に何であるかを教えてもらえますか?アプリを実行すると、なぜグレー表示になるのですか?
Naveen、

この問題を解決するためにこれが必要な理由を誰か教えてください。
mask8

新しいiosで背景を表示できるからです。なぜそれが何らかの灰色のビューに設定されているのかは、Appleが紹介した問題にすぎません。非常に奇妙な、非常にばかげています。しかし、iOSのコーディング中に奇妙でおかしなことに遭遇する毎日
レイジーコーダー

30

この解決策に感謝します。これをUIViewControllerのIBOutletでUITableViewプロパティに適用すると、次のようにうまく機能します。

[panelTable setBackgroundView:nil];
[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
[panelTable setBackgroundColor:UIColor.clearColor]; // Make the table view transparent

真ん中の行[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]]は必要ありません。
NIKHIL、2011年

4
フリーズファイア:実際にあります。これがないと、テーブルセルの境界に奇妙なアーティファクトが描画されます。
ヒルトンキャンベル

6

iPadでは、このbackgroundViewプロパティを使用して、グループ化されたテーブルの灰色の背景色を作成しているようです。したがって、iPadでグループ化されたテーブルの背景色を変更するにはnilbackgroundViewプロパティを外してbackgroundColorから、目的のテーブルビューにを設定する必要があります。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // If you need to support iOS < 3.2, check for the availability of the
    // backgroundView property.
    if ([self.tableView respondsToSelector:@selector(setBackgroundView:)]) {
        self.tableView.backgroundView = nil;
    }
    self.tableView.backgroundColor = [UIColor whiteColor];
}

はい、このチェックは、以前のiOSをサポートするために追加する必要があります。
karim 2013

2

Xcode 6.1およびiOS 8.1以降、特にiPad(セルの背景も設定する場合)では、テーブルの背景とセルの背景を設定する必要があるようです。

たとえば、iPhoneストーリーボードでは、セルをクリアカラーに設定してから、背景画像のある透明なテーブルに対して、プログラムでテーブルの背景画像を設定できます。ただし、iPadでこれと同じ構成を表示すると、セルが明確になりません。iPadでは、プログラムでセルをクリアするように設定する必要があります。


Xcode 6.4でビルドされ、iOS 9.2で実行されているアプリでこの問題が発生します。(静的)テーブルビューセルの背景色をInterface Builderでクリアに設定すると、iPhoneではクリアに見えましたが、iPadでは、ビューコントローラーの-viewDidLoad:メソッドでセルの背景色をクリアに設定するまで、それらは白でした。
グレッグ、

1

テーブルにbackgroundColorとViewを設定しようとしましたが、うまくいかず(Xcode 5 iOS7.1 iPadシミュレーター)、iPhoneには問題なく見えましたが、iPadでは明るい灰色の背景色です...

セル自体のbackgroundColorを操作すると、iOS 7.1 4/2014でこれが修正されました

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier = @"ViewSomeTriggerCell";

        // get a cell or a recycled cell
        sictVCViewSomeTriggerCell *cellTrigger = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        // put a picture and a word in the cell (positions set in .xib)
        NSString * tname = [self.fetchedTriggersArray objectAtIndex:indexPath.row];
        cellTrigger.imageTrigger.image = [UIImage imageNamed:@"icon_appicon.png"];
        cellTrigger.labelName.text = tname;

        // set background color, defeats iPad wierdness
        // http://stackoverflow.com/questions/2688007/uitableview-backgroundcolor-always-gray-on-ipad

        // clearColor is what I wanted, and it worked, also tested with purpleColor
        cellTrigger.backgroundColor =[UIColor clearColor];
        return cellTrigger;

}


0

アプリケーションがiPhoneとiPadの両方をターゲットにしている場合は、次のようにすることができます。

[myTableView setBackgroundColor:[UIColor clearColor]]; // this is for iPhone

if ([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone) {
    [myTableView setBackgroundView:nil];
    [myTableView setBackgroundView:[[UIView alloc] init]];
} // this is for iPad only

TableView allocにはARCの自動解放がないことに注意してください。


0

UIViewControllerを別のUIViewControllerに追加する場合は、UITableViewに加えてビューの背景をclearColorに設定する必要があります。そうしないと、明るい灰色ではなく白い背景になります。

if ([myViewController.myTableView respondsToSelector:@selector(setBackgroundView:)]) {
    [myViewController.myTableView setBackgroundView:nil];
}
myViewController.myTableView.backgroundColor = [UIColor clearColor];
myViewController.view.backgroundColor = [UIColor clearColor];

0
  • iPad 2のシミュレーション
  • iOS 7.1〜8.3の実行
  • XCode 6.3から構築

上記のどれも、単一のXIBを使用して指定されたUIViewController-> UITableViewでは機能しませんでした。うまくいったのは、セットアップ全体をストーリーボードに移動し、IBインスペクターを使用して背景色を設定することでした。


0

私もこのような問題を抱えていました。のUITableViewgroupTableViewBackgroundColor何を設定しても背景色は常に変わりません。

症状はこの問題のようなものです- ビューが表示される前にUITableViewが背景色をリセットしています

init関数で背景色を設定したところ、正解です。でviewDidLoadviewWillAppear、ステージ、それは正しいです。ただし、viewDidAppearでは、背景色がデフォルトの色にリセットされます。

受け入れられた回答は現在機能しません。

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[UIView alloc] init]];

これが私の解決策です。or ではなくviewDidLoad関数tableViewの背景色を設定するだけです。initviewWillAppear

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.