Dostosowuję UITableView
. Chcę ukryć linię oddzielającą ostatnią komórkę ... czy mogę to zrobić?
Wiem, że mogę to zrobić, tableView.separatorStyle = UITableViewCellStyle.None
ale wpłynęłoby to na wszystkie komórki tableView. Chcę, żeby wpłynęło to tylko na moją ostatnią komórkę.
Odpowiedzi:
w
viewDidLoad
, dodaj tę linię:oraz w
cellForRowAtIndexPath
:dla niższych wersji iOS
dla wyższych wersji iOS 7 (w tym iOS 8)
źródło
[cell.contentView addSubview:line]
zamiast tego należy użyć[cell addSubview:line]
cellForRowAtIndexPath
. Pamiętaj, że komórki są ponownie wykorzystywane. Za każdym razem, gdy komórka zostanie ponownie użyta, dodasz kolejny widok linii separatora. Na dużych listach może to wpłynąć na wydajność przewijania. I to po prostu niewłaściwy sposób.Możesz użyć następującego kodu:
Szybki:
lub:
dla domyślnego marginesu:
aby pokazać separator od końca do końca
Cel C:
źródło
UITableView
, podczas gdy zaakceptowana odpowiedź działa.self.tableView.separatorColor = [UIColor clearColor];
naprawiłem to.cell.separatorInset = UIEdgeInsetsMake(0.f, 0.f, 0.f, cell.bounds.size.width-cell.layoutMargins.left);
Jeśli nie odejmę wartości cell.layoutMargins.left, linia separatora jest rysowana od lewej granicy do lewego marginesu (jeśli taki masz).textLabel
ekran.Kontynuacja odpowiedzi Hirena .
w ViewDidLoad i następujący wiersz:
Lub, jeśli korzystasz z XIB lub Storyboard, zmień „ separator ” na „ none ”:
I w CellForRowAtIndexPath dodaj to:
Oto przykład wyniku, w którym wyświetlam widok tabeli z dynamicznymi komórkami (ale mam tylko jeden z zawartością). W rezultacie tylko ten jeden ma separator, a nie wszystkie „fałszywe” widoki tabeli automatycznie dodają do wypełnienia ekranu.
Mam nadzieję że to pomoże.
EDYCJA: Dla tych, którzy nie zawsze czytają komentarze, istnieje lepszy sposób, aby to zrobić za pomocą kilku wierszy kodu:
źródło
Jeśli nie chcesz samodzielnie rysować separatora, użyj tego:
Ten interfejs API jest dostępny tylko od iOS 7.
źródło
separatorInset
wydaje się wstawiać zarówno zawartość komórki, jak i separatora, co wymaga kolejnegocell.IndentationWidth = -10000;
separatorInset
0 dla górnej, lewej i dolnej oraz szerokości komórki po prawej:cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, cell.bounds.size.width);
Pozwala to uniknąć konieczności dostosowania jakichkolwiek innych właściwości komórki.moim środowiskiem programistycznym jest
powyższe odpowiedzi nie działają dla mnie w pełni
po wypróbowaniu moim w końcu działającym rozwiązaniem jest:
a efekt jest następujący:
źródło
Ustaw
separatorInset.right = .greatestFiniteMagnitude
na swojej komórce.źródło
awakeFromNib
może spowodować, że cały ekranapplicationDidBecomeActive
W Swift 3, Swift 4 i Swift 5 możesz napisać rozszerzenie do UITableViewCell w następujący sposób:
Następnie możesz użyć tego jak poniżej (gdy komórka jest instancją komórki):
Naprawdę lepiej jest przypisać szerokość komórki widoku tabeli jako lewą wstawkę zamiast przypisywać jej losową liczbę. Ponieważ w niektórych wymiarach ekranu może nie teraz, ale w przyszłości separatory mogą być nadal widoczne, ponieważ ta losowa liczba może być niewystarczająca. Ponadto w iPadzie w trybie poziomym nie można zagwarantować, że separatory zawsze będą niewidoczne.
źródło
Lepsze rozwiązanie dla iOS 7 i 8
Jeśli twoja aplikacja jest obrotowa - użyj 3000.0f dla stałej lewej wstawki lub oblicz ją na bieżąco. Jeśli spróbujesz ustawić prawą wstawkę, masz widoczną część separatora po lewej stronie komórki w iOS 8.
źródło
W systemie iOS 7 separator komórek w stylu UITableView wygląda nieco inaczej. Wygląda to trochę tak:
Próbowałem odpowiedzieć Kemenaranowi na to:
Wydaje mi się jednak, że to nie działa. Nie jestem pewien dlaczego. Postanowiłem więc użyć odpowiedzi Hirena , ale
UIView
zamiast tegoUIImageView
narysowałem linię w stylu iOS 7:Jeśli tego używasz, upewnij się, że podłączysz prawidłową wysokość widoku tabeli w drugiej instrukcji if. Mam nadzieję, że jest to przydatne dla kogoś.
źródło
W podklasie UITableViewCell przesłoń układ layoutSubviews i ukryj _UITableViewCellSeparatorView. Działa pod iOS 10.
źródło
Nie sądzę, aby to podejście działało w żadnych okolicznościach z dynamicznymi komórkami ...
Nie ma znaczenia, w jakiej metodzie widoku tabeli zastosujesz to dla komórek dynamicznych, komórka, na której zmieniłeś właściwość wstawki, zawsze będzie miała teraz ustawioną właściwość wstawki za każdym razem, gdy zostanie usunięta z kolejki, powodując gwałtowny brak separatorów linii ... zmień to sam.
Coś takiego działało dla mnie:
W ten sposób aktualizujesz stan struktury danych przy każdym ładowaniu
źródło
W Swift przy użyciu iOS 8.4 :
Uwaga: powyższy fragment kodu będzie działał w UITableView przy użyciu komórek dynamicznych. Jedynym problemem, jaki można napotkać, jest użycie komórek statycznych z kategoriami, typem separatora innym niż none i zgrupowanym stylem dla widoku tabeli. W rzeczywistości w tym konkretnym przypadku nie ukryje ostatniej komórki każdej kategorii. Aby temu zaradzić, rozwiązaniem, które znalazłem, było ustawienie separatora komórek (poprzez IB) na none, a następnie ręczne utworzenie (poprzez kod) widoku linii do każdej komórki. Na przykład sprawdź poniższy fragment:
źródło
Użyj tej podklasy, zestaw
separatorInset
nie działa na iOS 9.2.1, zawartość zostałaby ściśnięta.https://gist.github.com/liruqi/9a5add4669e8d9cd3ee9
źródło
O wiele prostsze i logiczne jest wykonanie tego:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [[UIView alloc] initWithFrame:CGRectZero]; }
W większości przypadków nie chcesz widzieć tylko ostatniego separatora tableCiewCell. To podejście usuwa tylko ostatni separator tableViewCell i nie trzeba myśleć o problemach z automatycznym układaniem (tj. Obracającym się urządzeniem) lub wartościami kodu twardego, aby skonfigurować wstawki separatora.
źródło
W
willdisplaycell
:źródło
Korzystając ze Swift 3 i stosując najszybszą metodę hakowania, możesz poprawić kod za pomocą rozszerzeń :
Następnie podczas konfigurowania komórki:
źródło
źródło
Najlepszym sposobem na osiągnięcie tego jest wyłączenie domyślnych separatorów linii, podklasy
UITableViewCell
i dodanie niestandardowego separatora linii jako widoku podrzędnegocontentView
- patrz poniżej komórka niestandardowa, która służy do prezentacji obiektu typu,SNStock
który ma dwie właściwości łańcucha,ticker
orazname
:Aby wyłączyć użycie domyślnego separatora wiersza,
tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
. Strona konsumenta jest stosunkowo prosta, patrz przykład poniżej:źródło
W przypadku Swift 2:
dodaj następujący wiersz do
viewDidLoad()
:źródło
jeśli zaakceptowana odpowiedź nie działa, możesz spróbować:
Wspaniale ;)
źródło
Wypróbuj poniższy kod, który może pomóc rozwiązać problem
źródło
źródło
Musisz wziąć niestandardową komórkę i dodać Etykietę i ustawić ograniczenie, takie jak etykieta powinna obejmować cały obszar komórki. i napisz poniższy konstruktor.
Ustaw także margines układu UITableView w następujący sposób
źródło
Nie mogłem ukryć separatora w określonej komórce, z wyjątkiem użycia następującego obejścia
źródło
W iOS7 i nowszych, czystszym sposobem jest użycie INFINITY zamiast wartości na stałe. Nie musisz się martwić aktualizacją komórki, gdy ekran się obraca.
źródło
Jak zauważyło (wiele) innych, możesz łatwo ukryć wszystkie separatory UITableViewCell, po prostu wyłączając je dla całego samego UITableView; np. w twoim UITableViewController
Niestety, to jest prawdziwa PITA do zrobienia na komórkę , o co tak naprawdę pytasz.
Osobiście próbowałem wielu permutacji zmiany
cell.separatorInset.left
, jak sugerują (wielu) inni, ale problemem jest cytowanie Apple (wyróżnienie dodane):„ ... Można wykorzystać tę właściwość, aby dodać przestrzeń między bieżącą komórką za treści i po lewej i prawej krawędzi stołu. Wartości wpuszczanym dodatnie przesuwają zawartość komórek i separator komórek wewnątrz i od krawędzi stole ... ”
Jeśli więc spróbujesz „ukryć” separator, odsuwając go poza ekran w prawo, możesz skończyć również wcięciem zawartości komórki. Jak sugeruje crifan, możesz następnie spróbować zrekompensować ten paskudny efekt uboczny poprzez ustawienie
cell.indentationWidth
icell.indentationLevel
odpowiednie cofnięcie wszystkiego, ale uważam, że jest to również niewiarygodne (treść wciąż się wcina ...).Najbardziej niezawodny sposób, jaki znalazłem, to przesadzenie
layoutSubviews
w prostej podklasie UITableViewCell i ustawienie prawej wstawki tak, aby uderzała w lewą wstawkę, dzięki czemu separator ma szerokość 0 i jest tak niewidoczny [należy to zrobić w widoku układu, aby automatycznie obroty uchwytu]. Dodam również metodę wygody do mojej podklasy, aby ją włączyć.Zastrzeżenie: nie ma niezawodnego sposobu na przywrócenie oryginalnej wstawki, więc nie można „odblokować” separatora, dlatego używam nieodwracalnej
hideSeparator
metody (w przeciwieństwie do odsłonięcia separatoraIsHidden). Uwaga: separatorInset utrzymuje się w ponownie używanych komórkach, więc ponieważ nie możesz „odblokować”, musisz trzymać te komórki separatora ukryte w swoim własnym identyfikatorze ponownego użycia.źródło
Moim wymaganiem było ukrycie separatora między 4. a 5. komórką. Osiągnąłem to przez
źródło
Szybki:
Cel C:
źródło
Wewnątrz klasy komórek widoku tabeli. umieść te linie kodu
źródło
Na iOS9 miałem problem z tym, że zmiana wstawek separatora wpływa również na położenie etykiety tekstowej i szczegółowej.
Rozwiązałem to dzięki temu
źródło