UITableView backgroundColor ist auf dem iPad immer grau

128

Wenn ich das backgroundColorfür mein einstelle UITableView, funktioniert es gut auf dem iPhone (Gerät und Simulator), aber NICHT auf dem iPad-Simulator. Stattdessen bekomme ich einen hellgrauen Hintergrund für jede Farbe, die ich einstelle, einschließlich groupTableViewBackgroundColor.

Schritte zum Reproduzieren:

  1. Erstellen Sie ein neues navigationsbasiertes Projekt.
  2. Öffnen Sie RootViewController.xib und setzen Sie den Tabellenansichtsstil auf "Gruppiert".
  3. Fügen Sie diesen Responder dem RootViewController hinzu:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. Wählen Sie Simulator SDK 3.2, erstellen und ausführen.
  5. Sie erhalten einen schwarzen Hintergrund (Gerät und Simulator).
  6. Wählen Sie Ihr Ziel im Projektbaum aus.
  7. Klicken Sie auf Projekt: Aktuelles Ziel für iPad aktualisieren.
  8. Bauen und ausführen.
  9. Sie erhalten einen hellgrauen Hintergrund.
  10. Wenn Sie den Stil der Tabellenansicht auf "Normal" zurücksetzen, wird ein schwarzer Hintergrund angezeigt.

Danke für Ihre Hilfe!

rjobidon
quelle
2
Ah, jetzt sind iPhone und iPad hier in iOS6 wieder ausgerichtet :-)
Gerd
3
Bravo für die Verwendung der selten verwendeten Begriffe "Schritte zur Reproduktion"! :-p
Constantino Tsarouhas

Antworten:

245

Probieren Sie eines davon aus.

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];
nach vorne gezogen
quelle
3
Ich weiß nicht, ob es Nebenwirkungen gibt, aber es funktioniert! Vielen Dank! self.tableView.backgroundView = nil;
Rjobidon
30
SEHR SEHR WICHTIG: Dies funktioniert nur mit SDK 3.2. Zur Abwärtskompatibilität mit 3.1.3. und früher müssen Sie überprüfen, ob die Tabellenansicht auf die Eigenschaft backgroundView reagiert: if ([self.tableView replyToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; Andernfalls stürzt Ihre App ab und wird abrupt beendet. Sie können mir vertrauen!
Rjobidon
1
Ja, ich habe die obige Lösung ausprobiert und sie hat bei mir funktioniert. Kann mir jemand sagen, was dieses Problem eigentlich ist. Warum ist die App ausgegraut, wenn sie ausgeführt wird?
Naveen
Bitte sagen Sie uns jemand, warum dies erforderlich ist, um dieses Problem zu lösen.
Maske8
denn mit dem neuen ios können Sie eindeutig eine Hintergrundansicht erstellen. Warum es auf eine graue Ansicht eingestellt ist, ist nur ein Problem, das Apple eingeführt hat. sehr seltsam, sehr dumm. Aber andererseits ist es jeden Tag, dass ich beim Codieren für iOS auf etwas Seltsames und Dummes stoße
The Lazy Coder
30

Vielen Dank für diese Lösung. Ich habe dies auf eine UITableView-Eigenschaft mit IBOutlet in einem UIViewController angewendet und es funktioniert wie folgt:

[panelTable setBackgroundView:nil];
[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
[panelTable setBackgroundColor:UIColor.clearColor]; // Make the table view transparent
Alexander
quelle
Die mittlere Zeile [panelTable setBackgroundView: [[UIView alloc] init] autorelease]] ist nicht erforderlich.
NIKHIL
4
Freezing Fire: Eigentlich gibt es. Ohne sie erhalten Sie seltsame Zeichnungsartefakte in den Tabellenzellenrändern.
Hilton Campbell
6

Auf dem iPad backgroundViewscheint die Eigenschaft verwendet zu werden, um die graue Hintergrundfarbe für gruppierte Tabellen zu erstellen. Um die Hintergrundfarbe für gruppierte Tabellen auf dem iPad zu ändern, sollte nildie backgroundViewEigenschaft deaktiviert und dann backgroundColordie gewünschte Tabellenansicht festgelegt werden.

- (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];
}
Philipp Frischmuth
quelle
Ja, diese Prüfung sollte hinzugefügt werden, um frühere iOS-Geräte zu unterstützen.
Karim
2

Ich denke, es ist erwähnenswert, dass ab Xcode 6.1 und iOS 8.1, speziell für iPad (wenn Sie auch den Zellenhintergrund festlegen möchten), anscheinend der Tabellenhintergrund UND der Zellenhintergrund festgelegt werden müssen.

Auf einem iPhone-Storyboard können Sie beispielsweise eine Zelle so einstellen, dass die Farbe klar ist, und dann das Hintergrundbild der Tabelle programmgesteuert für eine transparente Tabelle mit Hintergrundbild festlegen. Wenn Sie jedoch dieselbe Konfiguration auf dem iPad anzeigen würden, wären die Zellen nicht klar. Zellen müssen so eingestellt werden, dass sie programmgesteuert für das iPad gelöscht werden.

Klugscheißer
quelle
Ich sehe dieses Problem für Apps, die mit Xcode 6.4 erstellt wurden und unter iOS 9.2 ausgeführt werden. Ich habe die Hintergrundfarben meiner (statischen) Tabellenansichtszellen in Interface Builder so eingestellt, dass sie auf dem iPhone gelöscht werden. Auf dem iPad waren sie jedoch weiß, bis ich die Hintergrundfarben der Zellen so eingestellt habe, dass sie in der -viewDidLoad:Methode meines View Controllers gelöscht werden.
Greg
1

habe versucht, backgroundColor und View für die Tabelle einzustellen, hatte kein Glück (Xcode 5 iOS7.1 iPad Simulator), sah für das iPhone OK aus, aber die hellgraue Hintergrundfarbe auf dem iPad ...

Die Arbeit mit backgroundColor für die Zelle selbst hat dies für mich unter iOS 7.1 4/2014 behoben

- (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;

}}

cube108
quelle
0

Wenn Ihre Anwendung sowohl auf das iPhone als auch auf das iPad abzielt, können Sie dies folgendermaßen tun:

[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

Beachten Sie, dass die TableView-Zuordnung keine Autorelease für ARC enthält.

gmogames
quelle
0

Wenn Sie einem anderen UIViewController einen UIViewController hinzufügen, müssen Sie zusätzlich zu UITableView auch den Hintergrund Ihrer Ansicht auf clearColor einstellen. Andernfalls erhalten Sie einen weißen Hintergrund anstelle von hellgrau.

if ([myViewController.myTableView respondsToSelector:@selector(setBackgroundView:)]) {
    [myViewController.myTableView setBackgroundView:nil];
}
myViewController.myTableView.backgroundColor = [UIColor clearColor];
myViewController.view.backgroundColor = [UIColor clearColor];
irmu
quelle
0
  • IPad 2 simulieren
  • Ausführen von iOS 7.1 bis 8.3
  • Erstellt aus XCode 6.3

Keines der oben genannten Verfahren funktionierte für meinen UIViewController-> UITableView, der mit einer einzigen XIB angegeben wurde. Was funktioniert hat, war das gesamte Setup in ein Storyboard zu verschieben und die Hintergrundfarbe mit dem IB-Inspektor festzulegen.

QED
quelle
0

Ich habe auch solche Probleme. Die UITableViewHintergrundfarbe wird immer seingroupTableViewBackgroundColor egal, was ich einstelle.

Das Symptom ist wie folgt : UITableView setzt seine Hintergrundfarbe zurück, bevor die Ansicht angezeigt wird

Nachdem ich die Hintergrundfarbe in initFunktion gesetzt habe, ist sie korrekt. In viewDidLoadund viewWillAppearBühne ist es richtig. InviewDidAppear die Hintergrundfarbe jedoch auf die Standardfarbe zurückgesetzt.

Die akzeptierte Antwort funktioniert jetzt nicht.

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

Hier ist meine Lösung. Stellen Sie einfach die Hintergrundfarbe von tableView auf viewDidLoadFunktion anstatt auf initoder ein viewWillAppear.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
Eleganz66
quelle