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.