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.