Zaimplementowałem niestandardową klasę komórek widoku tabeli, która dziedziczy UITableViewCell
. Widok tabeli zawiera obraz tła, więc chcę, aby tło komórki było przezroczyste. Wygląda świetnie przed iOS7.
Jednak w iOS7 komórka jest zawsze wyświetlana z białym tłem.
Nawet w Xcode7, 2015 jest błąd w scenorysie : musisz ustawić kolor tła komórki w kodzie.
ios
objective-c
cocoa-touch
ios7
Kjuly
źródło
źródło
Odpowiedzi:
Jak powiedział Apple DOC ( odniesienie do klasy UITableViewCell ):
Więc w moim przypadku, aby wyświetlić komórki z przezroczystym tłem, wystarczy zaimplementować metodę delegowania w kontrolerze widoku tabeli, jak poniżej:
Uwaga : Jak powiedział @null: „... wydaje się, że w narzędziu do tworzenia interfejsów jest błąd ...” , nie jestem do końca pewien, czy zawiera błąd, ale wydaje się, że jego komentarz otrzymał kilka głosów. Więc może być coś nie tak, jeśli użyjesz IB. :)
źródło
tableView:cellForRowAtIndexPath:
metodzie.Zbadałem go trochę i odkryłem, że kolor tła komórki jest ustawiany przez system Wygląd. Jeśli więc wszystkie komórki w aplikacji mają czyste tło, najprostszym rozwiązaniem byłoby:
I nawet jeśli mają inne tło, wyraźny kolor wydaje się najwygodniejszy jako domyślny.
źródło
UITableViewCell
, więc nie było dla mnie problemem zapewnienie superklasy z inicjatorem, aby ustawić kolor BGclearColor
, ale zgadnij co? To nie działało ... Mam na myśli, DLACZEGO APPLE?Napisz to w metodzie cellForRowAtIndexPath przed komórką zwrotną;
źródło
Domyślny kolor tła
UITableViewCell
w iOS 7 to biały.Musisz ustawić
backgroundColor
właściwość gdzieś w swoim kodzie. Na przykład ustaw go po utworzeniu komórki.źródło
W rzeczywistości stwierdziłem, że problem powstał z powodu braku ustawienia tła koloru UITableView. Jeśli zmienisz kolor tła UITableViewCell na czysty i nadal widzisz biały, upewnij się, że kolor tła UITableView jest ustawiony na czysty (lub cokolwiek chcesz).
W Swift
źródło
To zdecydowanie błąd w systemie iOS. W iOS 8 ustawienie koloru tła
Interface Builder
działa dobrze na iPhonie, ale na iPadzie zawsze tak jestwhiteColor
. Aby to naprawić, wcellForIndexPath
komunikacie źródła danych wstaw to:cell.backgroundColor = cell.backgroundColor
I to zadziała. Właśnie dlatego powiedziałem, że to błąd, ponieważ sam kod jest w zasadzie bzdurą * t, ale działa.
źródło
Możliwe, że domyślnie wybrana jest twoja UITableViewCell. Możesz to potwierdzić za pomocą nowego wizualnego debuggera Xcode 6 (lub dowiedzieć się dokładnie, który widok powoduje wyświetlenie białej komórki).
Co ciekawe, po zapoznaniu się z tym ... ustawienie koloru tła wybranej komórki do wyczyszczenia nadal nie działało .. po przeprowadzeniu dalszych badań okazuje się, że musiałem zmodyfikować styl zaznaczania podczas tworzenia tej niestandardowej komórki:
źródło
Odkryłem, że żadne z powyższych nie działało w XCode 5.1.1, iOS 7.1.
Jeśli używasz Konstruktora interfejsów z komórkami prototypowymi, wybierz komórkę prototypową, a następnie w selektorze atrybutów w sekcji Widok zmień domyślną formę tła na Wyczyść kolor:
To wydaje się działać dobrze. Żadna z powyższych zmian kodu również nie jest potrzebna - jest to czyste rozwiązanie IB.
źródło
Przyjęta odpowiedź nie rozwiązała problemu. Musiałem to zrobić:
Z klasy źródła danych tabeli metoda cellForRowAtIndexPath:
źródło
cell = [tableView dequeueReusableCellWithIdentifier:<#Reuse ID#> forIndexPath:indexPath]
. We wcześniejszych wersjach upuszczasz argument indexPath, a następnie testujesz na zero, tworząc instancjęinitWithStyle:reuseIdentifier
zgodnie z fragmentem kodu w przypadku zerowym.Dla mnie ustawienie
cell.backgroundColor = cell.contentView.backgroundColor;
albo wtableView:willDisplayCell:forRowAtIndexPath:
lubtableView:cell:forRowAtIndexPath:
na pracę.Jest tak, ponieważ ustawiłem kolor tła contentView w Konstruktorze interfejsów zgodnie z potrzebami.
źródło
Podczas dodawania obiektów interfejsu użytkownika do komórki Xcode 5 / IOS 7 dodaje nowy „Widok treści”, który będzie nadzorem wszystkich elementów w komórce. Aby ustawić kolor tła komórki, ustaw kolor tła tego widoku treści. Powyższe rozwiązania nie działały dla mnie, ale to działało dla mnie dobrze.
źródło
Rozwiązanie Swift 1.2:
Po prostu dodaj wyraźną definicję koloru tła komórki w taki sposób:
źródło
Miał podobny problem, musiał
dodaj to do kodu, aby to poprawić
źródło
Możesz także użyć kodu koloru, aby zyskać lukratywną komórkę UITableView.
Oto kod do zastosowania metody kodu koloru:
źródło