UITableView jasne tło


90

Zdaję sobie sprawę, że iOS 7 nie został oficjalnie wydany i nie powinniśmy o tym rozmawiać, ALE wariuję, próbując rozwiązać ten problem. Na iOS 6 mój widok tabeli był przezroczysty i wyglądał świetnie. Po raz pierwszy korzystam z iOS 7, a tło jest białe.

Próbowałem zmienić kolor backgroundColor tabeli, kolor komórki itp. Na UIColor clearColor, ale nie wprowadziłem żadnych zmian.

Jak rozwiązać ten problem?

stół


1
Próbowałeś nakryć stół na backgroundViewczysty?
— Cofnij

Czy możesz pokazać kod, w którym ustawiasz kolor tła? A co z poglądem rodziców? Być może tło widoku tabeli jest wyraźne, a rodzic nie?
— sooper

Zauważyłem to samo, ale kiedy zainstalowałem tę samą aplikację, która była wcześniejsza niż moja obecna wersja iOS 7.0, tak się nie stało. Czy zatem ten problem występuje w xCode5.0?
— Totumus Maximus

Odpowiedzi:


123
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

w cellForRowAtIndexPath

Upewnij się również, że widok tabeli faktycznie ma przezroczyste tło (w scenorysie): wprowadź opis obrazu tutaj


George, dodaj ten kod do metody - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
— IanStallings

1
W tych przypadkach, jeśli naprawdę potrzebujesz selectedBackgroundView, możesz umieścić w cellForRowAtIndexPath: cell.selectedBackgroundView = [[[UIImageView assign] initWithImage: [UIImage imageNamed: @ "yourBgImage.png"]] autorelease]; lub nawet w awakeFromNib: self.selectedBackgroundView = ... Zwróć uwagę, że: self.backgroundColor = [UIColor clearColor]; nie działa w awakeFromNib pod iOS7. Ale: cell.backgroundColor = [UIColor clearColor]; działa poprawnie tylko w cellForRowAtIndexPath na iOS 7.0
— slamor

11
Wystarczy dodać wiersz: cell.backgroundColor = [UIColor clearColor];
— evya,

Działa to jak urok cell.backgroundColor = [UIColor clearColor];
— bpolat

Jak to zrobić w Swift?
— Qadir Hussain

58

Połóż to:

cell.backgroundColor = [UIColor clearColor];

W tej sekcji:

cellForRowAtIndexPath

1
W iOS 6 wystarczy ustawić na backgroundViewpusty widok, ale ten dodatkowy kod jest potrzebny dla iOS 7.
— Kevin Borders

25

Spróbuj najpierw ustawić backgroundView na nil.

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

Nie jestem pewien, czy jest to zmiana w dokumentacji z iOS7 lub zawsze tam była i po prostu nie wpłynęła na kolor tła, ale na odwołanie do klasy UITableView @property backgroundView

„Aby ustawić kolor tła widoku tabeli, należy ustawić tę właściwość na zero”.

edycja: poprawiona składnia kodu


25

Odpowiedź została udzielona, ​​ale na wiele sposobów nieprawidłowo.

Musisz zaimplementować poniższą metodę delegowania:

    - (void)tableView:(UITableView *)tableView  willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
}

Nie możesz umieścić poprawki w cellForRowAtIndexPath, ponieważ jest to po wyrenderowaniu komórki i będzie migać białym tłem, zanim tło zostanie wyczyszczone (na wolniejszych urządzeniach).

Użyj tej metody delegowania, a Twoje problemy zostaną rozwiązane!


1
Tak. W przypadku iOS 7 jest to sposób na wyczyszczenie tła. Wszystkie inne sugestie powyżej mogą nie działać.
— girish_vr

15

Właściwie oficjalnie poprawne miejsce do zmiany koloru tła komórki jest inne zgodnie z dokumentacją ( odwołanie do klasy UITableViewCell ):

Niezależnie od tego, czy używasz komórki predefiniowanej, czy niestandardowej, możesz zmienić tło komórki, używając właściwości backgroundView lub zmieniając dziedziczoną właściwość backgroundColor. W iOS 7 komórki mają domyślnie białe tło; we wcześniejszych wersjach iOS komórki dziedziczą kolor tła otaczającego widoku tabeli. Jeśli chcesz zmienić kolor tła komórki, zrób to w metodzie tableView: willDisplayCell: forRowAtIndexPath: swojego delegata widoku tabeli.


Próbuję tego, ale pierwsze pokazane komórki mają białe tło. Jeśli utworzę nowe komórki przez przewijanie, będą miały przezroczyste tło, które chcę. Nie wiem, czego jeszcze spróbować…
— David Dunham

Nieważne, wydaje się, że to kwestia czasu. Robiłem rzeczy w AwakeFromNib, co było za wcześnie.
— David Dunham


6

To dość frustrujący problem. Oto moje obecne rozwiązanie:

Dodaj to do swojej UITableViewCellpodklasy.

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

O Boże. Dziękuję Ci. Uratowałem moją noc. Twoja odpowiedź powinna była zostać zaakceptowana.
— Michal Shatz

5

To zadziałało dla mnie w iOS7 +:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

a potem w cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];


4

To zadziałało tylko dla mnie, gdy edytowałem wyraźny kolor tła dla każdej komórki i czysty kolor dla samej tabeli. ZARÓWNO PROGRAMMATYCZNIE

aby ustawić czysty kolor stołu:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

aby ustawić kolor dla komórek:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}

3

Jedna rzecz do miłej. Domyślny kolor UITable wydaje się być biały (nie wiem dlaczego)

Tło białe

Ale lepiej to zmień.


Idealny! To był brakujący spokój. Nie potrzeba dodatkowej linii kodu!
— Morpheus78

3

Pierwszy zestaw

tableView.backgroundColor = [UIColor clearColor];

Drugi zestaw

tableCell.backgroundColor = [UIColor clearColor];

3

utwórz IB Outlet dla widoku tabeli @IBOutlet słaby var yourTable: UITableView!

w widoku obciążenia

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

jeśli chcesz wyczyścić kolor komórki, zrób to również w

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.backgroundColor = UIColor.clearColor() 

}

2

W mojej aplikacji musiałem ustawić kolor backgroundColorna mojej UITableViewCellklasie, [UIColor clearColor]gdy zaktualizowałem iOS 7.


2

Próbować

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

I

cell.backgroundColor = [UIColor clearColor];

2

W moim przypadku komórka została utworzona przy użyciu xib. wygląda na to, że program budujący interfejs na xcode5 ma problem z ustawieniem clearColor na cell.backgroundColor.

Wszystko, co musiałem zrobić, to rzeczywiście ustawić

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}

kontrola osiąga koniec funkcji non-void
— ropo


2

szybki 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}

1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];

0

Zestaw

tableView.backgroundColor = [UIColor clearColor];

in viewDidLoad.

jeśli to nie działa, spróbuj:

tableView.backgroundView = nil;

0

Szybko 3

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
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.