Posso forzare un UITableView a nascondere il separatore tra celle vuote? [duplicare]
-
06-07-2019 - |
Domanda
Questa domanda ha già una risposta qui:
- Elimina i separatori extra sotto UITableView 33 risposte
Quando si utilizza un UITableView
in stile semplice con un numero sufficiente di celle che UITableView
non può visualizzarle tutte senza scorrimento, non viene visualizzato alcun separatore nello spazio vuoto sotto le cellule. Se ho solo poche celle, lo spazio vuoto sotto di esse include i separatori.
Esiste un modo per forzare un UITableView
per rimuovere i separatori nello spazio vuoto? Altrimenti dovrò caricare uno sfondo personalizzato con un separatore disegnato per ogni cella che renderà più difficile ereditare il comportamento.
Ho trovato una domanda in qualche modo simile qui , ma Non riesco a utilizzare un UITableView
raggruppato nella mia implementazione.
Soluzione
Puoi ottenere ciò che desideri definendo un piè di pagina per la vista tabella. Vedi questa risposta per maggiori dettagli: Elimina i separatori extra sotto UITableView
Altri suggerimenti
Per iOS 7. * e iOS 6.1
Il metodo più semplice è impostare la proprietà tableFooterView
:
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
}
Per le versioni precedenti
Puoi aggiungerlo a TableViewController (funzionerà per qualsiasi numero di sezioni):
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return 0.01f;
}
e se non bastano , aggiungi anche il seguente codice troppo :
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
Per Swift:
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView() // it's just 1 line, awesome!
}
Usando il link di Daniel, ho creato un'estensione per renderla più utilizzabile:
//UITableViewController+Ext.m
- (void)hideEmptySeparators
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
v.backgroundColor = [UIColor clearColor];
[self.tableView setTableFooterView:v];
[v release];
}
Dopo alcuni test, ho scoperto che la dimensione può essere 0 e funziona anche. Quindi non aggiunge alcun tipo di margine alla fine della tabella. Quindi grazie per questo hack. Ho deciso di pubblicarlo qui poiché non mi piace il reindirizzamento.
Swift Versione
Il metodo più semplice è impostare la proprietà tableFooterView:
override func viewDidLoad() {
super.viewDidLoad()
// This will remove extra separators from tableview
self.tableView.tableFooterView = UIView(frame: CGRectZero)
}
Per Swift:
self.tableView.tableFooterView = UIView(frame: CGRectZero)
Se usi iOS 7 SDK, questo è molto semplice.
Aggiungi questa riga nel tuo metodo viewDidLoad:
self.yourTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
L'impostazione del separatorStyle
della tabella su UITableViewCellSeparatorStyleNone
(nel codice o in IB) dovrebbe fare il trucco.
Uso quanto segue:
UIView *view = [[UIView alloc] init];
myTableView.tableFooterView = view;
[view release];
Fallo in viewDidLoad. Ma puoi impostarlo ovunque.
Quanto segue ha funzionato molto bene per me per questo problema:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
CGRect frame = [self.view frame];
frame.size.height = frame.size.height - (kTableRowHeight * numberOfRowsInTable);
UIView *footerView = [[UIView alloc] initWithFrame:frame];
return footerView; }
Dove kTableRowHeight è l'altezza delle celle delle mie righe e numberOfRowsInTable è il numero di righe che avevo nella tabella.
Spero che aiuti,
Brenton.