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ół

Teddy13
źródło
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

slamour
źródło
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
Maximus Vermillion
źródło
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

dandan
źródło
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!

złapać
źródło
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.

asdusd
źródło
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
7

szybki 3, 4 i 5

cell.backgroundColor = UIColor.clear
Jamal alayq
źródło
6

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

Dodaj to do swojej UITableViewCellpodklasy.

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}
Berk
źródło
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];
DevC
źródło
4

wypróbuj ten fragment kodu

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
Marco Antonio Uzcategui Pescoz
źródło
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
}
SoliQuiD
źródło
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ń.

Paul Brewczyński
źródło
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];
Fantasyczl
źródło
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() 

}
veenaay pawar
źródło
2

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

Arthur Dexter
źródło
2

Próbować

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

I

cell.backgroundColor = [UIColor clearColor];
Jorgy
źródło
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;
}
Ben G.
źródło
kontrola osiąga koniec funkcji non-void
ropo
2

Po prostu wybierz opcję Wyczyść kolor na tle widoku dla tabeli i komórki również.

Walter Barlet
źródło
2

szybki 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}
MrMins
źródło
1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];
Kiran Jasvanee
źródło
0

Zestaw

tableView.backgroundColor = [UIColor clearColor];

in viewDidLoad.

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

tableView.backgroundView = nil;
Lal Krishna
źródło
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
}
Patricio Bravo
źródło