Wenn ich eine Tabellenansicht mit 4 Zeilen einrichte, befinden sich noch zusätzliche Trennlinien (oder zusätzliche leere Zellen) unter den gefüllten Zeilen.
Wie würde ich diese Zellen entfernen?
Ziehen Sie einfach eine UIView auf die Tabelle. Im Storyboard wird es oben unter Ihren benutzerdefinierten Zellen angezeigt. Sie können es lieber "Fußzeile" nennen.
Hier ist es aus Gründen der Klarheit grün dargestellt, Sie möchten wahrscheinlich eine klare Farbe haben.
Beachten Sie, dass Sie durch Anpassen der Höhe beeinflussen können, wie der "Bottom Bounce" der Tabelle behandelt wird. (Höhe Null ist normalerweise in Ordnung).
Um es programmgesteuert zu machen:
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];
}
oder wenn Sie es vorziehen,
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Zum Table View Controller hinzufügen ...
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return CGFLOAT_MIN;
}
und wenn nötig ...
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
Hier ist eine andere Möglichkeit, dies ohne den gruppierten Tabellenstil zu tun, und eine, die Sie wahrscheinlich nicht schätzen würden. Hinzufügen ein Header und Fußzeile zum Tisch (vielleicht reicht die eine oder andere aus, nicht geprüft) bewirkt, dass die Trennzeichen aus den Füll-/Leerzeilen verschwinden.
Ich bin darauf gestolpert, weil ich ein wenig Platz am oberen und unteren Rand der Tische haben wollte, um das Risiko zu verringern, dass Tasten anstelle einer Tischzelle mit fleischigen Fingern gedrückt werden. Hier ist eine Methode zum Einfügen einer leeren Ansicht als Kopf- und Fußzeile. Verwenden Sie die gewünschte Höhe, Sie beseitigen jedoch die zusätzlichen Trennlinien.
- (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];
}
Als Antwort auf @Casebash ging ich zurück zum Code in meiner App ("AcmeLists" List Manager im iTunes Store ...) und stellte die addHeaderAndFooter-Methode zur Überprüfung kurz. Ohne es habe ich die zusätzlichen Zeilentrennzeichen; mit dem code habe ich was du in diesem fenster siehst ausrichten: keine bildzeilentrenner bild . Ich bin mir nicht sicher, warum es für Sie nicht funktioniert hätte. Außerdem ist es für mich sinnvoll, dass eine benutzerdefinierte Fußzeile in einer Tabellenansicht zwangsläufig aufhören muss, Trennzeichen für leere Zeilen darunter zu zeichnen. Das wäre abscheulich. Als Referenz habe ich mir Tabellen angesehen, in denen es mehr Zeilen gab als auf dem Bildschirm angezeigt werden konnte, und dann eine Tabelle mit zwei Zeilen. In beiden Fällen keine Fremdseparatoren.
Möglicherweise wurden Ihre benutzerdefinierten Ansichten nicht wirklich hinzugefügt. Um dies zu überprüfen, setzen Sie die Hintergrundfarbe auf etwas anderes als clearColor
, z. B. [UIColor redColor]
. Wenn Sie unten am Tisch keine roten Balken sehen, wurde Ihre Fußzeile nicht gesetzt.
Entfernen von zusätzlichen Trennlinien für leere Zeilen in UITableView in Swift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.yourTableview.tableFooterView = UIView()
}
Ich möchte wkw antworten:
Wenn Sie nur Fußzeile mit der Höhe 0 hinzufügen, wird der Trick ausgeführt. (getestet mit SDK 4.2, 4.4.1)
- (void) addFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
[self.myTableView setTableFooterView:v];
}
oder noch einfacher: Fügen Sie bei der Einrichtung Ihrer Tabellenansicht folgende Zeile hinzu:
//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];
oder noch einfacher - einfach alle Trennzeichen entfernen:
[_tableView setTableFooterView:[UIView new]];
Danke an wkw nochmal :)
Ziehen Sie einfach eine UIView
als Fußzeile in Ihre UITableView
. Legen Sie die Höhe der Fußzeile auf 0 fest.
Versuche dies. Es hat für mich funktioniert:
- (void) viewDidLoad
{
[super viewDidLoad];
// Without ARC
//self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
// With ARC, tried on Xcode 5
self.tableView.tableFooterView = [UIView new];
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
}
Sie können am Ende einfach eine leere Fußzeile hinzufügen, dann werden die leeren Zellen ausgeblendet, sie sehen aber auch ziemlich hässlich aus:
tableView.tableFooterView = UIView()
Es gibt einen besseren Ansatz: Fügen Sie am Ende der Tabellenansicht eine 1-Punkt-Linie hinzu, da die Fußzeile und die leeren Zellen ebenfalls nicht mehr angezeigt werden.
let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView
Wenn Sie Swift verwenden, fügen Sie viewDidLoad des Controllers, der die Tableview verwaltet, den folgenden Code hinzu:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView(frame: CGRectZero)
}
Für Swift 4.0 ist der CGRectZero veraltet, daher müssen Sie CGRect.zero
verwenden.
Verbesserung der Lösung von J. Costa: Sie können eine globale Änderung an der Tabelle vornehmen, indem Sie folgende Codezeile eingeben:
[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
innerhalb der ersten möglichen Methode (normalerweise in AppDelegate
, in: application:didFinishLaunchingWithOptions:
-Methode).
Ich weiß, dass diese Frage akzeptiert wurde, aber ich habe hier verschiedene Möglichkeiten angegeben, wie die Extra-Trennlinie von UITableView
ausgeblendet wird.
Sie können die Standard-Trennlinie von tableView
ausblenden und Ihre benutzerdefinierte Zeile am oberen Rand jeder Zelle einfügen.
Update:
Der einfachste Weg, ein benutzerdefiniertes Trennzeichen hinzuzufügen, ist das Hinzufügen einer einfachen UIView
mit einer Höhe von 1px:
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];
ODER
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];
ODER
- (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];
}
ODER Der beste und einfachste Weg, den ich je mag, ist
self.tableView.tableFooterView = [[UIView alloc] init];
Versuchen Sie es mit einer davon;
fügen Sie einfach diesen Code hinzu ( Swift ). .
tableView.tableFooterView = UIView()
extra-Trennlinienzeile für zusätzliche Trennlinien in Swift 3.0
self.tbltableView.tableFooterView = UIView(frame: .zero)
Ich verwendete eine Tabellensicht, um eine feste Anzahl von Zeilen mit fester Höhe anzuzeigen. Daher habe ich die Größe einfach geändert und nicht scrollbar gemacht.
Swift funktioniert gut mit:
tableView.tableFooterView = UIView()
Wenn Sie nach der letzten Zelle kein Trennzeichen wünschen, benötigen Sie für Ihre Fußzeile eine Höhe nahe Null, aber nicht Null.
In Ihrer UITableViewDelegate
:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Fügen Sie einfach eine Ansicht mit der gewünschten Trennfarbe als Hintergrundfarbe, 100% Breite, 1 Pixel Höhe an der Position x0 y-1 zu Ihrer tableViewCell hinzu. Stellen Sie sicher, dass die tableViewCell keine Unteransichten ausschneidet, stattdessen die tableView.
So erhalten Sie ein absolut einfaches und funktionierendes Trennzeichen nur zwischen vorhandenen Zellen ohne Hack pro Code oder IB.
Hinweis: Bei einem vertikalen Absprung nach oben wird der 1. Separator angezeigt. Dies sollte jedoch kein Problem sein, da dies das Standardverhalten von iOS ist.
Sie können viele Antworten auf diese Frage finden. Bei den meisten handelt es sich um Manipulationen mit dem UITableView
-Attribut von tableFooterView
, und dies ist die richtige Art, leere Zeilen auszublenden. Für die Bequemlichkeit habe ich eine einfache Erweiterung erstellt, mit der leere Zeilen in Interface Builder aktiviert/deaktiviert werden können. Sie können es aus dieser Gist -Datei auschecken. Ich hoffe, es könnte etwas Zeit sparen.
extension UITableView {
@IBInspectable
var isEmptyRowsHidden: Bool {
get {
return tableFooterView != nil
}
set {
if newValue {
tableFooterView = UIView(frame: .zero)
} else {
tableFooterView = nil
}
}
}
}
Verwendungszweck:
tableView.isEmptyRowsHidden = true
Um zusätzliche Trennzeichenzeilen programmatisch aus dem unteren Bereich von UItableview zu entfernen, notieren Sie sich einfach die folgenden zwei Codezeilen. Dadurch werden zusätzliche Trennzeichen entfernt.
tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;
Dieser Trick funktioniert die ganze Zeit für mich, probiere es selbst aus.
Wenn Sie nur einen Abschnitt haben, ist der schnellste und einfachste Weg, den Tabellenansichtstil von "Einfach" auf "Gruppiert" zu setzen. (siehe Bild)
Wenn Sie mehr Abschnitte haben, müssen Sie möglicherweise die Kopfhöhe auf Null setzen (abhängig von Ihrem/Ihrem Kunden/dem Projektmanager).
Wenn Sie mehr Abschnitte haben und sich nicht mit den Kopfzeilen herumschlagen möchten (selbst wenn dies im einfachsten Fall nur eine Zeile ist), müssen Sie eine UIView als Fußzeile festlegen, wie in den vorherigen Antworten erläutert.
Wenn Sie unerwünschten Speicherplatz in UITableview entfernen möchten, können Sie zwei Methoden verwenden
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
Schnell und einfach Swift 4 way.
override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}
Wenn Sie statische Zellen haben. Sie können das Trennzeichen auch im Inspector-Fenster deaktivieren. (Dies ist nicht wünschenswert, wenn Sie das Trennzeichen benötigen. In diesem Fall verwenden Sie die oben gezeigte Methode.)
Versuchen Sie es damit
für Ziel C
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.yourTableView.tableFooterView = [UIView new];
}
für Swift
override func viewDidLoad() {
super.viewDidLoad()
self.yourTableView.tableFooterView = UIView()
}
Ich hatte etwas Glück beim Implementieren eines einzigen Teils der akzeptierten Antwort (iOS 9+, Swift 2.2). Ich hatte versucht, zu implementieren:
self.tableView.tableFooterView = UIView(frame: .zero)
Es gab jedoch keine Auswirkungen auf meine tableView
- Ich glaube, es hat etwas mit der Tatsache zu tun, dass ich UITableViewController
verwendet habe.
Stattdessen musste ich nur die viewForFooterInSection
-Methode überschreiben (ich habe die tableFooterView
nicht an anderer Stelle festgelegt):
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView(frame: .zero)
}
Dies funktionierte gut für eine tableView
mit einem einzelnen Abschnitt (wenn Sie mehrere Abschnitte haben, müssen Sie den letzten angeben).
Ich habe diese kleine Tableview-Erweiterung hinzugefügt, die durchgehend hilft
extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}
Falls Sie eine searchbar
in Ihrer view
haben (um beispielsweise die Anzahl der Ergebnisse zu begrenzen), müssen Sie Folgendes in shouldReloadTableForSearchString
und shouldReloadTableForSearchScope:
hinzufügen.
controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
UIKit
erstellt keine leere Zelle, wenn die tableView
eine tableFooterView
hat. Wir können also einen Trick machen und ein UIView
-Objekt mit Nullhöhe als Fußzeile der tableView
zuweisen.
tableView.tableFooterView = UIView()
Versuche dies
self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];
In Swift (ich verwende 4.0) können Sie dies durch Erstellen einer benutzerdefinierten UITableViewCell
-Klasse und overriding
der setSelected
-Methode erreichen. Dann der separator insets
alles nach 0 . (meine Hauptklasse mit der Tabellenansicht hat einen klaren Hintergrund) Farbe.
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)
}