web-dev-qa-db-ja.com

iPadのUITableView backgroundColorは常にグレー

backgroundColorUITableViewを設定すると、iPhone(デバイスおよびシミュレーター)では正常に動作しますが、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. テーブルビューのスタイルをプレーンに戻すと、黒い背景が表示されます。

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

128
rjobidon

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

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

このソリューションに感謝します。これをUIViewControllerのIBOutletでUITableViewプロパティに適用すると、次のように機能します。

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

IPadでは、backgroundViewプロパティを使用して、グループ化されたテーブルの灰色の背景色を作成しているようです。したがって、iPadでグループ化されたテーブルの背景色を変更するには、nilプロパティをbackgroundViewアウトしてから、目的のテーブルビューで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];
}
6

Xcode 6.1およびiOS 8.1の時点で、特にiPadの場合(セルの背景も設定したい場合)、テーブルの背景とセルの背景を設定する必要があることに注意する価値があると思います。

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

2
WiseGuy

テーブルにbackgroundColorとViewを設定してみましたが、運がありませんでした(Xcode 5 iOS7.1 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;

}

1
cube108

この種の問題もありました。 UITableViewの背景色は、設定に関係なく常にgroupTableViewBackgroundColorになります。

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

init関数で背景色を設定した後、それは正しいです。 viewDidLoadおよびviewWillAppearステージでは、正しいです。ただし、viewDidAppearでは、背景色はデフォルトの色にリセットされます。

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

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

これが私の解決策です。 tableViewの背景色は、viewDidLoadinitではなく、viewWillAppear functionで設定するだけです。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
0
elegance66
  • IPad 2のシミュレーション
  • IOS 7.1から8.3の実行
  • XCode 6.3から構築

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

0
QED

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
irmu

アプリケーションが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
gmogames