Po skonfigurowaniu widoku tabeli z 4 wierszami pod wypełnionymi wierszami nadal znajdują się dodatkowe linie separatora (lub dodatkowe puste komórki).
Jak usunę te komórki?
Po skonfigurowaniu widoku tabeli z 4 wierszami pod wypełnionymi wierszami nadal znajdują się dodatkowe linie separatora (lub dodatkowe puste komórki).
Jak usunę te komórki?
Odpowiedzi:
Po prostu przeciągnij UIView do tabeli. W serii ujęć będzie u góry poniżej niestandardowych komórek. Możesz nazwać to „stopką”.
Tutaj jest pokazany na zielono dla jasności, prawdopodobnie chcesz wyraźnego koloru.
Pamiętaj, że dostosowując wysokość, możesz wpływać na sposób obsługi „odbicia od dołu” stołu, jak wolisz. (Wysokość zero jest zwykle w porządku).
Aby to zrobić programowo:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableFooterView = UIView()
}
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [UIView new];
}
lub jeśli wolisz
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Dodaj do kontrolera widoku tabeli ...
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return CGFLOAT_MIN;
}
a jeśli to konieczne ...
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
tableFooterView
pozostawia separator w ostatniej komórce w wierszu, ponieważ tabela nadal przewiduje zawartość poniżej tej komórki. Użycie historycznego sposobu wyeliminuje ten ostatni separator i ogólnie będzie wyglądało lepiej.
Oto inny sposób na zrobienie tego bez stylu pogrupowanego stołu, którego prawdopodobnie nie zgadniesz. Dodanie nagłówka i stopki do tabeli (być może jeden lub drugi wystarczy, nie zaznaczono) powoduje, że separatory znikają z wypełniacza / pustych wierszy.
Natknąłem się na to, ponieważ chciałem trochę miejsca na górze i na dole stolików, aby zmniejszyć ryzyko uderzenia w guziki zamiast komórki stołu mięsistymi palcami. Oto metoda umieszczenia pustego widoku jako nagłówka i stopki. Użyj dowolnej wysokości, nadal eliminujesz dodatkowe linie separatora.
- (void) addHeaderAndFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
v.backgroundColor = [UIColor clearColor];
[self.myTableView setTableHeaderView:v];
[self.myTableView setTableFooterView:v];
[v release];
}
W odpowiedzi na @Casebash wróciłem do kodu w mojej aplikacji (Menedżer list „AcmeLists” w sklepie iTunes ...) i zwróciłem uwagę na metodę addHeaderAndFooter w celu weryfikacji. Bez tego mam dodatkowe separatory wierszy; z kodem mam to, co widzisz w tym oknie: brak obrazu separatorów wierszy tabeli . Nie jestem więc pewien, dlaczego by to nie zadziałało. Co więcej, ma dla mnie sens, że posiadanie dowolnej niestandardowej stopki w widoku tabeli musi koniecznie przestać rysować separatory wierszy dla pustych wierszy poniżej. To byłoby ohydne. Dla porównania, przejrzałem tabele, w których było więcej wierszy niż można było wyświetlić na ekranie, a następnie tabelę z dwoma rzędami. W obu przypadkach brak obcych separatorów.
Być może twoje niestandardowe widoki nie zostały faktycznie dodane. Aby to sprawdzić, ustaw kolor tła na inny niż clearColor
np [UIColor redColor]
. Jeśli nie widać czerwonych pasków u dołu tabeli, stopka nie została ustawiona.
Usuwanie dodatkowych linii separatora dla pustych wierszy w UITableView w Swift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.yourTableview.tableFooterView = UIView()
}
Chciałbym przedłużyć wkw odpowiedź:
Wystarczy dodać tylko stopkę o wysokości 0. (testowany na SDK 4.2, 4.4.1)
- (void) addFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
[self.myTableView setTableFooterView:v];
}
lub nawet prościej - tam, gdzie konfigurujesz widok tabeli, dodaj ten wiersz:
//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];
lub jeszcze prościej - aby po prostu usunąć wszelkie separatory:
[_tableView setTableFooterView:[UIView new]];
Jeszcze raz dziękuję wkw :)
Po prostu przeciągnij a UIView
do UITableView
stopki. Ustaw wysokość widoku stopki na 0.
Spróbuj tego. To działało dla mnie:
- (void) viewDidLoad
{
[super viewDidLoad];
// Without ARC
//self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
// With ARC, tried on Xcode 5
self.tableView.tableFooterView = [UIView new];
}
Jeśli używasz Swift, dodaj następujący kod do viewDidLoad kontrolera, który zarządza tableview:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView()
}
Możesz po prostu dodać pustą stopkę na końcu, aby ukryć puste komórki, ale będzie też wyglądać dość brzydko:
tableView.tableFooterView = UIView()
Istnieje lepsze podejście: dodaj 1-punktową linię na końcu widoku tabeli jako stopkę, a puste komórki również nie będą już wyświetlane.
let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView
po prostu dodaj ten kod ( Swift ). .
tableView.tableFooterView = UIView()
Postęp w rozwiązaniu J. Costa: Możesz wprowadzić globalną zmianę w tabeli, umieszczając następujący wiersz kodu:
[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
wewnątrz pierwszej możliwej metody (zwykle w metodzie AppDelegate
: w application:didFinishLaunchingWithOptions:
:).
Wiem, że na to pytanie została zaakceptowana odpowiedź, ale podaję tutaj różne sposoby na ukrycie dodatkowej linii separatora UITableView
.
Możesz ukryć tableView
standardową linię separatora i dodać własną linię u góry każdej komórki.
Aktualizacja:
Najłatwiejszym sposobem dodania niestandardowego separatora jest dodanie prostej UIView
o wysokości 1px:
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];
LUB
self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
self.tblView.delegate=self;
self.tblView.dataSource=self;
[self.view addSubview:self.tblView];
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
v.backgroundColor = [UIColor clearColor];
[self.tblView setTableHeaderView:v];
[self.tblView setTableFooterView:v];
[v release];
LUB
- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return 0.01f;
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
// To "clear" the footer view
return [[UIView new] autorelease];
}
LUB Najlepszy i prosty sposób, jaki kiedykolwiek lubię
self.tableView.tableFooterView = [[UIView alloc] init];
Wypróbuj dowolną z nich;
Możesz znaleźć wiele odpowiedzi na to pytanie. Większość z nich wokół manipulacji z UITableView
„s tableFooterView
atrybut i to jest właściwa droga, aby ukryć puste wiersze. Dla wygody stworzyłem proste rozszerzenie, które pozwala włączać / wyłączać puste wiersze w interfejsie Konstruktora. Możesz to sprawdzić z tego pliku gist . Mam nadzieję, że zaoszczędzi to trochę twojego czasu.
extension UITableView {
@IBInspectable
var isEmptyRowsHidden: Bool {
get {
return tableFooterView != nil
}
set {
if newValue {
tableFooterView = UIView(frame: .zero)
} else {
tableFooterView = nil
}
}
}
}
Stosowanie:
tableView.isEmptyRowsHidden = true
uitableview dodatkowa linia separatora ukryj dodatkowe linie separatora ukryj w swift 3.0
self.tbltableView.tableFooterView = UIView(frame: .zero)
Jeśli nie chcesz żadnego separatora po ostatniej komórce, potrzebujesz stopki bliskiej zeru, ale niezerowej wysokości.
W twoim UITableViewDelegate
:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Swift świetnie współpracuje z:
tableView.tableFooterView = UIView()
Wystarczy dodać widok z wybranym kolorem separatora jako kolorem tła, 100% szerokości, wysokości 1px w pozycji x0 y-1 do tableViewCell. Upewnij się, że tableViewCell nie przycina widoków podrzędnych, zamiast tego tableView powinien.
Otrzymujesz więc absolutnie prosty i działający separator tylko pomiędzy istniejącymi komórkami, bez żadnego hacka na kod lub IB.
Uwaga: przy pionowym odbiciu u góry pojawia się 1. separator, ale nie powinno to stanowić problemu, ponieważ jest to domyślne zachowanie iOS.
Aby programowo wyeliminować dodatkowe linie separatora z dolnej części UItableview, po prostu zapisz następujące dwa wiersze kodu, aby usunąć z niego dodatkowy separator.
tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;
Ta sztuczka działa na mnie cały czas, spróbuj sam.
Miałem trochę szczęścia, wdrażając jedną z zaakceptowanych odpowiedzi (iOS 9+, Swift 2.2). Próbowałem wdrożyć:
self.tableView.tableFooterView = UIView(frame: .zero)
Jednak nie miało to na mnie wpływu tableView
- uważam, że może mieć to coś wspólnego z faktem, że używałem UITableViewController
.
Zamiast tego musiałem tylko przesłonić viewForFooterInSection
metodę (nie ustawiłem tableFooterView
gdzie indziej):
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView(frame: .zero)
}
Działa to dobrze w tableView
przypadku pojedynczej sekcji (jeśli masz wiele sekcji, musisz określić ostatnią).
Jeśli masz tylko jedną sekcję, najszybszym i najprostszym sposobem jest ustawienie stylu widoku tabeli z „Zwykły” na „Zgrupowany”. (patrz zdjęcie)
Jeśli masz więcej sekcji, może być konieczne ustawienie wysokości nagłówka na zero (w zależności od upodobań twojego / twojego klienta / kierownika projektu)
Jeśli masz więcej sekcji i nie chcesz zadzierać z nagłówkami (nawet jeśli w najprostszym przypadku jest to tylko jedna linia), musisz ustawić UIView jako stopkę, jak wyjaśniono w poprzednich odpowiedziach)
Szybki i łatwy Swift 4 way.
override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}
Jeśli masz komórki statyczne. Możesz także wyłączyć separator w oknie Inspektora. (nie będzie to pożądane, jeśli potrzebujesz separatora. W takim przypadku użyj metody pokazanej powyżej)
super.viewDidLoad()
) i znajduje się w odpowiedzi wiki na górze. Jeśli chodzi o usunięcie wszystkich separatorów, to nie o to chodzi w tym pytaniu, więc lepiej cofnij swoją ostatnią edycję i / lub całkowicie usuń swoją odpowiedź.
Jeśli chcesz usunąć niechciane miejsce w UITableview, możesz użyć poniższych dwóch metod
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
Dodałem to małe rozszerzenie widoku tabeli, które pomaga przez cały czas
extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}
Spróbuj tego
dla celu C
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.yourTableView.tableFooterView = [UIView new];
}
dla Swift
override func viewDidLoad() {
super.viewDidLoad()
self.yourTableView.tableFooterView = UIView()
}
Jeśli masz searchbar
w swoim view
(na przykład, aby ograniczyć liczbę wyników), musisz również dodać następujące w shouldReloadTableForSearchString
ishouldReloadTableForSearchScope:
controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
W Swift (używam 4,0), można to osiągnąć poprzez tworzenie niestandardowej UITableViewCell
klasy, a overriding
ten setSelected
sposób. Następnie separator insets
wszystko do 0 . (moja główna klasa z widokiem tabeli ma wyraźne tło) kolor.
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// eliminate extra separators below UITableView
self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}