Wyeliminowanie dodatkowych separatorów poniżej UITableView

Kiedy konfiguruję widok tabeli z 4 wierszami, nadal są dodatkowe linie separatorów (lub dodatkowe puste komórki) pod wypełnionymi wierszami.

Jak usunąć te komórki?

obraz dla dodatkowych linii separatorów w UITableView

Author: Suragch, 2009-09-03

30 answers

[[5]}Interface builder (iOS 9+)

Po prostu przeciągnij UIView na stół. W storyboard będzie siedział na górze pod twoimi niestandardowymi komórkami. Możesz preferować nazwę "stopka".

Tutaj jest pokazany na Zielono dla jasności, prawdopodobnie potrzebujesz wyraźnego koloru.

Zwróć uwagę, że dostosowując wysokość, możesz wpływać na sposób obsługi" dolnego odbicia " stołu, jak wolisz. (Wysokość zero jest zwykle w porządku).

Tutaj wpisz opis obrazka


Aby zrobić to programowo:

Swift

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

Objective-C

IOS 6.1 +

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

Historycznie w iOS:

Dodaj do kontrolera widoku tabeli...

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     // This will create a "invisible" footer
     return CGFLOAT_MIN;
 }

I jeśli to konieczne...

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{        
    return [UIView new];

    // If you are not using ARC:
    // return [[UIView new] autorelease];
}
 1368
Author: J. Costa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-12 17:25:10

Oto inny sposób, aby to zrobić w / out styl tabeli zgrupowane, i jeden prawdopodobnie nie zgadniesz. Dodanie nagłówka i stopki do Tabeli (Być może jedna lub druga wystarcza, 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 tabel, aby zmniejszyć ryzyko uderzenia przycisków zamiast komórki tabeli z mięsistymi palcami. Oto metoda na przyklejenie pustego widoku w jako nagłówek i stopka. Używaj 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 listy" AcmeLists " w iTunes store...) i zwarcie metody addHeaderAndFooter do weryfikacji. bez niego, mam dodatkowe separatory wierszy; z kodem, mam to, co widzisz w tym oknie snap: brak separatorów wierszy tabeli obraz . Więc nie jestem pewien, dlaczego to nie działa na ty. Co więcej, ma dla mnie sens, że posiadanie dowolnej niestandardowej stopki w widoku tabeli musiałoby przestać rysować separatory wierszy dla pustych wierszy poniżej. To byłoby ohydne. W celach informacyjnych przyjrzałem się tabelom, w których było więcej wierszy niż można było wyświetlić na ekranie, a następnie tabeli z dwoma wierszami. W obu przypadkach nie ma zewnętrznych separatorów.

Być może Twoje niestandardowe widoki nie zostały dodane. Aby to sprawdzić, Ustaw kolor tła na inny niż clearColor, np., [UIColor redColor]. Jeśli nie widzisz czerwonych pasków na dole stołu, stopka nie była ustawiona.

 125
Author: wkw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-12 05:57:39

Usuwanie dodatkowych linii separatorów 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()
}
 54
Author: dineshthamburu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-21 13:33:57

Chciałbym rozszerzyć wkw ODPOWIEDŹ:

Wystarczy dodać tylko stopkę o wysokości 0. (testowane na sdk 4.2, 4.4.1)

- (void) addFooter
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectZero];

    [self.myTableView setTableFooterView:v];
}

Lub jeszcze prościej-gdzie skonfigurujesz swój tableview, dodaj tę linię:

//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];

Lub nawet prostsze-aby po prostu usunąć dowolne separatory:

[_tableView setTableFooterView:[UIView new]];

Dzięki wkw Jeszcze raz:)

 36
Author: Guntis Treulands,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 13:47:25

Dla systemu iOS 7 + za pomocą Storyboardów]}

Po prostu przeciągnij UIView do UITableView jako stopkę. Ustaw wysokość widoku stopki na 0.

 21
Author: Kyle Clegg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-18 01:27:32

Spróbuj tego. U mnie zadziałało:

- (void) viewDidLoad
{
  [super viewDidLoad];

  // Without ARC
  //self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];

  // With ARC, tried on Xcode 5
  self.tableView.tableFooterView = [UIView new];
}
 17
Author: Ambili B Menon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-20 23:56:42

Dla Swift:

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.tableFooterView = UIView()
    }
 10
Author: Sebastian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-25 11:36:49

RozwiÄ ... zanie J. Costy: moĹźesz wprowadziÄ ‡ globalnÄ ... zmianÄ ™ tabeli poprzez umieszczenie tej linijki kodu:

[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];

Wewnątrz pierwszej metody poosible (zwykle w AppDelegate, w: application: didFinishLaunchingWithOptions: method).

 6
Author: Or Shanoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-06 11:41:51

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(frame: CGRectZero)
}
 6
Author: Babatunde Adeyemi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-12 15:16:48

Możesz po prostu dodać pustą stopkę na końcu, a następnie ukryje puste komórki, ale będzie również wyglądać dość brzydko:

tableView.tableFooterView = UIView()

Tutaj wpisz opis obrazka

Jest lepsze podejście: dodaj linię 1 punktu 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

Tutaj wpisz opis obrazka

 6
Author: Darko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-16 09:47:16

Wystarczy dodać ten kod ( Swift ). .

tableView.tableFooterView = UIView()
 5
Author: roy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-01 20:36:14

Wiem, że to pytanie zostało zaakceptowane, ale umieściłem tutaj różne sposoby na ukrycie dodatkowej linii separatora UITableView.

Możesz ukryć standardową linię separatora tableView i dodać własną linię u góry każdej komórki.

Update:

Najprostszym sposobem dodania niestandardowego separatora jest dodanie prostej {[6] } 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 lubię to

self.tableView.tableFooterView = [[UIView alloc] init];

Spróbuj któregokolwiek z nich;

 4
Author: iPatel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-12 03:55:55

UITableView extra linia separatora Ukryj dodatkowe linie separatora Ukryj w swift 3.0

 self.tbltableView.tableFooterView = UIView(frame: .zero)
 4
Author: Parth Changela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-12 05:59:07

Używałem widoku tabeli, aby pokazać stałą liczbę wierszy o stałej wysokości, więc po prostu zmieniłem jego rozmiar i uczyniłem go nie-przewijalnym.

 4
Author: Casebash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-21 14:23:45

Wystarczy dodać widok z żądanym kolorem separatora jako kolor tła, 100% szerokości, 1px wysokości w pozycji x0 y-1 do tableViewCell. Upewnij się, że tableViewCell nie klipuje podwidywań, zamiast tego tableView powinien.

Więc otrzymujesz absolutny prosty i działający separator tylko między istniejącymi komórkami bez żadnych hackerów na kod lub IB.

Uwaga: na pionowym górnym odbiciu pojawia się pierwszy separator, ale nie powinno to być problemem, ponieważ jest to domyślne zachowanie systemu iOS.

 3
Author: maaalex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-24 09:59:36

SWIFT 3.0 świetnie współpracuje z tableView.tableFooterView = UIView()

 2
Author: Marcelo Gracietti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-22 23:51:34

Jeśli nie chcesz żadnego separatora po ostatniej komórce, potrzebujesz blisko zera, ale niezerowej wysokości dla stopki.

W Twoim UITableViewDelegate:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}
 2
Author: Cœur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-14 07:38:47

Aby programowo wyeliminować dodatkowe linie separatora od dołu UItableview, po prostu zapisz następujące dwie linie kodu i usunie z niego dodatkowy separator.

TableView.sectionFooterHeight = 0.f;

TableView.sectionHeaderHeight = 0.f;

Ta sztuczka działa na mnie cały czas, spróbuj sam. @KPCoding...

 2
Author: Kalpesh Panchasara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-17 10:44:23

Miałem trochę szczęścia w implementacji jednego kawałka zaakceptowanej odpowiedzi(iOS 9+, Swift 2.2). Próbowałem zaimplementować:

self.tableView.tableFooterView = UIView(frame: .zero)

Nie było jednak żadnego wpływu na moje tableView - wierzę, że może to mieć coś wspólnego z tym, że używałem UITableViewController.

Zamiast tego musiałem tylko nadpisać metodę viewForFooterInSection (nie ustawiłem tableFooterView gdzie indziej):

override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return UIView(frame: .zero)
}

To działało dobrze dla {[2] } z pojedynczą sekcją(jeśli masz wiele sekcji, musisz podać ostatnią).

 1
Author: BAP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-29 20:37:20

Jeśli chcesz usunąć niechciane miejsce w UITableview, możesz użyć dwóch metod

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0.1;
}
 1
Author: Hari c,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-15 11:13:16

Swift 4.0 Extension

Tylko małe rozszerzenie dla storyboardu:

Tutaj wpisz opis obrazka

extension UITableView {
    @IBInspectable
    var hideSeparatorForEmptyCells: Bool {
        set {
            tableFooterView = newValue ? UIView() : nil
        }
        get {
            return tableFooterView == nil
        }
    }
}
 1
Author: Nik Kov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-19 14:20:55

Spróbuj tego

self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];
 0
Author: vishnu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-05 09:11:39

Jeśli masz pasek wyszukiwania w widoku (aby ograniczyć liczbę wyników na przykład), musisz również dodać następujące w shouldReloadTableForSearchString i shouldReloadTableForSearchScope:

controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
 0
Author: user3900346,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-23 20:25:24

Jeśli masz tylko jedną sekcję, to najszybszym i najłatwiejszym sposobem jest ustawienie stylu widoku tabeli z "zwykłego" na "zgrupowany". (patrz obrazek)

Tableview Zgrupowane

Jeśli masz więcej sekcji, może być konieczne ustawienie wysokości nagłówka na zero (w zależności od gustu Twojego klienta/kierownika projektu)

Jeśli masz więcej sekcji i nie chcesz mieszać z nagłówkami (nawet jeśli jest to tylko jedna linia w najprostszym przypadku), musisz ustawić UIView jako stopkę, jak wyjaśniono w poprzednich odpowiedziach)

 0
Author: Gefilte Fish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-31 15:51:43

UIKit nie tworzy pustej komórki, gdy tableView ma tableFooterView. Możemy więc zrobić sztuczkę i przypisać obiekt o zerowej wysokości UIView jako stopkę tableView.

tableView.tableFooterView = UIView()
 0
Author: iMuzahid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-19 12:02:04

Szybki i łatwy Swift 4 way.

override func viewDidLoad() {
     tableView.tableFooterView = UIView(frame: .zero)
}

Jeśli masz statyczne komórki. Separator można również wyłączyć w oknie inspektora. (nie będzie to pożądane, jeśli potrzebujesz separatora. W takim przypadku użyj metody pokazanej powyżej) okno Inspektora

 0
Author: Alix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-19 23:47:51

W języku Swift (używam 4.0), możesz to osiągnąć, tworząc niestandardową klasę UITableViewCell i nadpisując metodę setSelected. Następnie separator wstawia wszystkie do 0. (moja główna klasa z widokiem tabeli ma jasne 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)
}
 0
Author: chillbumps,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-04 14:12:43

Dodałem to małe rozszerzenie tableview, które pomaga w całym

extension UITableView {
     func removeExtraCells() {
         tableFooterView = UIView(frame: .zero)
     }
}
 0
Author: Suresh Varma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-26 18:10:15

Jeśli podklasujesz UITableView, musisz to zrobić...

-(void)didMoveToSuperview {
    [super didMoveToSuperview];
    self.tableFooterView = [UIView new];
}
 -1
Author: Todd Vanderlin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-27 19:41:01

Po prostu dodaję tę linię w funkcji ViewDidLoad i problem naprawiony.

tableView.tableFooterView = [[UIView alloc] init]; 
 -1
Author: teapeng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-28 08:05:05