UITableView backgroundColor zawsze szary na iPadzie


128

Kiedy ustawię backgroundColorna mój UITableView, działa dobrze na iPhonie (urządzeniu i symulatorze), ale NIE na symulatorze iPada. Zamiast tego otrzymuję jasnoszare tło dla dowolnego ustawionego koloru groupTableViewBackgroundColor.

Kroki ku reprodukcji:

  1. Utwórz nowy projekt oparty na nawigacji.
  2. Otwórz RootViewController.xib i ustaw styl widoku tabeli na „Zgrupowane”.
  3. Dodaj ten obiekt odpowiadający do RootViewController:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. Wybierz Simulator SDK 3.2, skompiluj i uruchom.
  5. Otrzymasz czarne tło (urządzenie i symulator).
  6. Wybierz cel w drzewie projektu.
  7. Kliknij Project: Upgrade Current Target for iPad.
  8. Buduj i uruchamiaj.
  9. Otrzymasz jasnoszare tło.
  10. Przywróć styl widoku tabeli na Zwykły, a otrzymasz czarne tło.

Dzięki za pomoc!


2
Ach, teraz iPhone i iPad ponownie wyrównują się tutaj w iOS6 :-)
— Gerd

3
Brawo za używanie rzadko używanych terminów „kroki do reprodukcji”! :-p
— Constantino Tsarouhas

Odpowiedzi:


245

Wypróbuj jedną z nich.

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

3
Nie wiem, czy są efekty uboczne, ale działa! Dzięki! self.tableView.backgroundView = nil;
— rjobidon

30
BARDZO BARDZO WAŻNE: Działa to tylko z SDK 3.2. Aby zapewnić zgodność wsteczną z wersją 3.1.3. a wcześniej musisz sprawdzić, czy widok tabeli odpowiada właściwości backgroundView: if ([self.tableView respondsToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; w przeciwnym razie aplikacja ulegnie awarii i nagle się zamknie, możesz mi zaufać!
— rjobidon

1
tak, wypróbowałem powyższe rozwiązanie i zadziałało. Czy ktoś może mi powiedzieć, na czym właściwie polega ten problem. Dlaczego po uruchomieniu aplikacja jest wyszarzona?
— Naveen

Niech ktoś nam powie, dlaczego jest to wymagane do rozwiązania tego problemu?
— maska ​​8

ponieważ wyraźnie nowy ios pozwala na umieszczenie widoku tła. Dlaczego jest ustawiony na szary widok, to tylko problem, który wprowadził Apple. bardzo dziwne, bardzo głupie. Ale z drugiej strony każdego dnia napotykam coś dziwnego i głupiego podczas kodowania dla iOS
— The Lazy Coder

30

Wielkie dzięki za to rozwiązanie. Zastosowałem to we właściwości UITableView z IBOutlet w UIViewController i działa to dobrze tak, jak:

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

nie ma potrzeby stosowania środkowej linii [panelTable setBackgroundView: [[[UIView assign] init] autorelease]];
— NIKHIL

4
Freezing Fire: właściwie jest. Bez tego otrzymujesz dziwne artefakty rysunkowe w granicach komórek tabeli.
— Hilton Campbell

6

Na iPadzie backgroundViewwłaściwość wydaje się być używana do tworzenia szarego koloru tła dla zgrupowanych tabel. Aby zmienić kolor tła zgrupowanych tabel na iPadzie, należy nilwyłączyć backgroundViewwłaściwość, a następnie ustawić backgroundColorżądany widok tabeli.

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

Tak, to sprawdzenie powinno zostać dodane do obsługi starszych systemów iOS.
— karim

2

Myślę, że warto zauważyć, że od Xcode 6.1 i iOS 8.1, szczególnie dla iPada (jeśli chcesz również ustawić tło komórki), wydaje się, że musisz ustawić tło tabeli ORAZ tło komórki.

Na przykład w serii ujęć na telefonie iPhone można ustawić komórkę na wyczyszczenie koloru, a następnie ustawić programowo obraz tła tabeli dla przezroczystej tabeli z obrazem tła. Jednak gdybyś miał zobaczyć tę samą konfigurację na iPadzie, komórki nie byłyby jasne. Konieczne będzie programowe czyszczenie komórek dla iPada.


Widzę ten problem w przypadku aplikacji utworzonych za pomocą Xcode 6.4 i działających w systemie iOS 9.2. Ustawiłem kolory tła moich (statycznych) komórek widoku tabeli na jasne w Interface Builder i były one jasne na iPhonie, ale na iPadzie były białe, dopóki nie ustawiłem kolorów tła komórek na jasne w -viewDidLoad:metodzie kontrolera widoku .
— Greg

1

próbowałem ustawić kolor tła i widok dla stołu, nie miałem szczęścia (symulator iPada Xcode 5 iOS7.1), wyglądał dobrze na iPhone'a, ale jasnoszary kolor tła na iPadzie ...

praca z backgroundColor dla samej komórki naprawiła to dla mnie na 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

Jeśli Twoja aplikacja jest przeznaczona dla iPhone'a i iPada, możesz to zrobić w następujący sposób:

[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

Zwróć uwagę, że przydział TableView nie ma automatycznego wydania dla ARC.


0

Jeśli dodajesz UIViewController do innego UIViewController, musisz również ustawić tło widoku na clearColor oprócz UITableView, w przeciwnym razie otrzymasz białe tło zamiast jasnoszarego.

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

0
  • Symulowanie iPada 2
  • Z systemem iOS 7.1 do 8.3
  • Zbudowany z XCode 6.3

Żadne z powyższych nie działało dla mojego UIViewController-> UITableView określonego przy użyciu pojedynczego XIB. Udało się przenieść całą konfigurację do Storyboardu i ustawić kolor tła za pomocą inspektora IB.


0

Ja też mam tego rodzaju problem. UITableViewKolor tła będzie zawsze groupTableViewBackgroundColorbez względu na to, co mam ustawione.

Objaw jest podobny do tego problemu - UITableView resetuje kolor tła, zanim pojawi się widok

Po ustawieniu koloru tła w initfunkcji jest to poprawne. W viewDidLoadi viewWillAppearetap, to jest prawidłowe. Jednak w viewDidAppearprogramie kolor tła jest resetowany do koloru domyślnego.

Zaakceptowana odpowiedź teraz nie działa.

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

Oto moje rozwiązanie. Po prostu ustaw kolor tła tableView w viewDidLoadfunction zamiast initlub viewWillAppear.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.