web-dev-qa-db-de.com

Beseitigen Sie zusätzliche Trennzeichen unter UITableView

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?

 image for extra separator lines in UITableView

645
RoundOutTooSoon

Interface Builder (iOS 9+)

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).

 enter image description here


Um es programmgesteuert zu machen: 

Schnell

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.tableFooterView = UIView()
}

Ziel c

iOS 6.1 und höher

- (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];

Historisch in iOS:

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];
}
1410
J. Costa

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.

128
wkw

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()
}
57
dineshthamburu

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 :)

36

Für iOS 7+ mit Storyboards

Ziehen Sie einfach eine UIView als Fußzeile in Ihre UITableView. Legen Sie die Höhe der Fußzeile auf 0 fest.

22
Kyle Clegg

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];
}
18
Ambili B Menon

Für Swift:

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.tableFooterView = UIView()
    }
12
Sebastian

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()

 enter image description here

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

 enter image description here

8
Darko

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.

8

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).

7
o.shnn

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;

6
iPatel

fügen Sie einfach diesen Code hinzu ( Swift ). .

tableView.tableFooterView = UIView()
6
roy

extra-Trennlinienzeile für zusätzliche Trennlinien in Swift 3.0

 self.tbltableView.tableFooterView = UIView(frame: .zero)
5
Parth Changela

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.

5
Casebash

Swift funktioniert gut mit:

tableView.tableFooterView = UIView()
4

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
}
4
Cœur

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.

4
maaalex

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

 enter image description here

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.

3

Wenn Sie nur einen Abschnitt haben, ist der schnellste und einfachste Weg, den Tabellenansichtstil von "Einfach" auf "Gruppiert" zu setzen. (siehe Bild)

 TableView Grouped

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.

1
Gefilte Fish

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;
}
1
Hari c

Swift 4.0 Erweiterung

Nur eine kleine Erweiterung für das Storyboard:

 enter image description here

extension UITableView {
    @IBInspectable
    var hideSeparatorForEmptyCells: Bool {
        set {
            tableFooterView = newValue ? UIView() : nil
        }
        get {
            return tableFooterView == nil
        }
    }
}
1
Nik Kov

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.)  inspector window

1
Alix

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()
}
1
Atanu Mondal

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).

1
BAP

Ich habe diese kleine Tableview-Erweiterung hinzugefügt, die durchgehend hilft

extension UITableView {
     func removeExtraCells() {
         tableFooterView = UIView(frame: .zero)
     }
}
0
Suresh Varma

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 ];
0
user3900346

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()
0
iMuzahid

Versuche dies

self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];
0
vishnu

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)
}
0
chillbumps