Quando imposto una vista tabella con 4 righe, ci sono ancora linee di separatori extra (o celle vuote extra) sotto le righe riempite.
Come rimuoverei queste celle?
Quando imposto una vista tabella con 4 righe, ci sono ancora linee di separatori extra (o celle vuote extra) sotto le righe riempite.
Come rimuoverei queste celle?
Risposte:
Basta trascinare un UIView sul tavolo. Nello storyboard, siederà nella parte superiore sotto le celle personalizzate. Puoi preferire chiamarlo "piè di pagina".
Qui è mostrato in verde per chiarezza, probabilmente vorresti un colore chiaro.
Notando che regolando l'altezza, puoi influenzare come viene gestito il "rimbalzo inferiore" della tabella, come preferisci. (L'altezza zero di solito va bene).
Per farlo programmaticamente:
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];
}
o se preferisci,
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Aggiungi al controller della vista tabella ...
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return CGFLOAT_MIN;
}
e se necessario ...
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
tableFooterView
lascia un separatore sull'ultima cella della riga, poiché la tabella anticipa ancora il contenuto sotto quella cella. L'uso del modo storico eliminerà l'ultimo separatore e avrà un aspetto complessivamente migliore.
Ecco un altro modo per farlo senza lo stile di tabella raggruppata, e probabilmente non lo indovineresti. L'aggiunta di un'intestazione e piè di pagina alla tabella (forse l'uno o l'altro è sufficiente, non è stata verificata) fa scomparire i separatori dalle righe di riempimento / vuote.
Mi sono imbattuto in questo perché volevo un po 'di spazio nella parte superiore e inferiore dei tavoli per ridurre il rischio di colpire i pulsanti invece di una cella della tabella con dita carnose. Ecco un metodo per inserire una vista vuota come intestazione e piè di pagina. Usa l'altezza che preferisci, eliminando comunque le linee di separazione extra.
- (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];
}
In risposta a @Casebash, sono tornato al codice nella mia app (Gestore elenchi "AcmeLists" nell'iTunes store ...) e ho messo in corto circuito il metodo addHeaderAndFooter per verificare. Senza di essa , ho i separatori di riga extra; con il codice, ho quello che vedi in questa finestra snap: nessuna immagine di separatori di righe di tabella . Quindi non sono sicuro del motivo per cui non avrebbe funzionato per te. Inoltre, per me ha senso che avere un piè di pagina personalizzato in una vista tabella debba necessariamente smettere di disegnare i separatori di riga per le righe vuote sottostanti. Sarebbe orribile. Per riferimento, ho esaminato le tabelle in cui c'erano più righe di quelle che potevano essere visualizzate sullo schermo, e quindi per una tabella con due righe. In entrambi i casi, nessun separatore estraneo.
Forse le tue visualizzazioni personalizzate non sono state effettivamente aggiunte. Per verificarlo, imposta il colore di sfondo su qualcosa di diverso da clearColor
, ad esempio [UIColor redColor]
. Se non vedi alcune barre rosse nella parte inferiore del tavolo, il piè di pagina non è stato impostato.
Rimozione di linee di separazione extra per le righe vuote 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()
}
Vorrei estendere la risposta di wkw :
Aggiungere semplicemente il piè di pagina con altezza 0 farà il trucco. (testato su sdk 4.2, 4.4.1)
- (void) addFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
[self.myTableView setTableFooterView:v];
}
o ancora più semplice: dove hai impostato la visualizzazione della tabella, aggiungi questa riga:
//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];
o anche più semplice - per rimuovere semplicemente tutti i separatori:
[_tableView setTableFooterView:[UIView new]];
Grazie a WKW ancora :)
Trascina semplicemente a UIView
nel tuo UITableView
piè di pagina. Imposta l'altezza della vista piè di pagina su 0.
Prova questo. Ha funzionato per me:
- (void) viewDidLoad
{
[super viewDidLoad];
// Without ARC
//self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
// With ARC, tried on Xcode 5
self.tableView.tableFooterView = [UIView new];
}
Se si utilizza Swift, aggiungere il codice seguente per viewDidLoad del controller che gestisce la vista tabella:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView()
}
Puoi semplicemente aggiungere un piè di pagina vuoto alla fine, quindi nasconderà le celle vuote ma sembrerà anche abbastanza brutto:
tableView.tableFooterView = UIView()
C'è un approccio migliore: aggiungi una linea di 1 punto alla fine della vista della tabella come piè di pagina e anche le celle vuote non verranno più mostrate.
let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView
aggiungi questo codice ( Swift ). .
tableView.tableFooterView = UIView()
Avanzamento della soluzione di J. Costa: è possibile apportare una modifica globale alla tabella inserendo questa riga di codice:
[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
all'interno del primo metodo possibile (di solito in AppDelegate
, in: application:didFinishLaunchingWithOptions:
metodo).
So che questa domanda è stata accettata come risposta, ma ho messo qui diversi modi per nascondere la linea di separazione extra di UITableView
.
Puoi nascondere tableView
la linea di separazione standard e aggiungere la tua linea personalizzata nella parte superiore di ogni cella.
Aggiornare:
Il modo più semplice per aggiungere un separatore personalizzato è aggiungere UIView
un'altezza semplice di 1px:
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];
O
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];
O
- (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];
}
OPPURE Il modo migliore e semplice che mi piace di sempre è
self.tableView.tableFooterView = [[UIView alloc] init];
Provane uno qualsiasi;
Puoi trovare molte risposte a questa domanda. La maggior parte di loro intorno manipolazione con UITableView
's tableFooterView
attributo e questo è il modo corretto per nascondere le righe vuote. Per comodità ho creato una semplice estensione che consente di attivare / disattivare le righe vuote da Interface Builder. Puoi verificarlo da questo file gist . Spero che possa farti risparmiare un po 'del tuo tempo.
extension UITableView {
@IBInspectable
var isEmptyRowsHidden: Bool {
get {
return tableFooterView != nil
}
set {
if newValue {
tableFooterView = UIView(frame: .zero)
} else {
tableFooterView = nil
}
}
}
}
Uso:
tableView.isEmptyRowsHidden = true
uitableview extra separator line nascondi extra separators lines hide in swift 3.0
self.tbltableView.tableFooterView = UIView(frame: .zero)
Se non si desidera alcun separatore dopo l'ultima cella, è necessario un'altezza vicina allo zero ma diversa da zero per il piè di pagina.
Nel tuo UITableViewDelegate
:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Swift funziona alla grande con:
tableView.tableFooterView = UIView()
Aggiungi una vista con il colore del separatore desiderato come colore di sfondo, larghezza 100%, altezza 1px nella posizione x0 y-1 sul tuo tavolo ViewCell. Assicurati che tableViewCell non tagli le sottoview, invece dovrebbe tableView.
Quindi ottieni un separatore assolutamente semplice e funzionante solo tra celle esistenti senza alcun hack per codice o IB.
Nota: su un rimbalzo superiore verticale viene visualizzato il primo separatore, ma questo non dovrebbe essere un problema perché è il comportamento predefinito di iOS.
Per eliminare le righe di separazione extra dalla parte inferiore di UItableview a livello di codice, basta scrivere seguendo due righe di codice e rimuoverà la separazione extra da essa.
tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;
Questo trucco funziona sempre con me, provaci.
Ho avuto la fortuna di implementare un singolo pezzo della risposta accettata (iOS 9+, Swift 2.2). Avevo provato a implementare:
self.tableView.tableFooterView = UIView(frame: .zero)
Tuttavia, non tableView
ho avuto alcun effetto sul mio - credo che potrebbe avere qualcosa a che fare con il fatto che stavo usando UITableViewController
.
Invece, ho dovuto solo sostituire il viewForFooterInSection
metodo (non ho impostato tableFooterView
altrove):
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView(frame: .zero)
}
Questo ha funzionato bene per un tableView
con una singola sezione (se hai più sezioni, devi specificare l'ultima).
Se hai solo una sezione, il modo più rapido e semplice è impostare lo stile di visualizzazione tabella da "Semplice" a "Raggruppato". (vedi immagine)
Se hai più sezioni, potresti dover impostare l'altezza dell'intestazione su zero (a seconda del gusto del tuo / del tuo cliente / del tuo project manager)
Se hai più sezioni e non vuoi scherzare con le intestazioni (anche se è solo una riga nel caso più semplice), devi impostare un UIView come piè di pagina, come spiegato nelle risposte precedenti)
Swift a 4 vie semplice e veloce.
override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}
Se hai celle statiche. Puoi anche disattivare il separatore dalla finestra di ispezione. (questo non sarà desiderabile se hai bisogno del separatore. In tal caso usa il metodo mostrato sopra)
super.viewDidLoad()
) ed è incluso nella risposta wiki in alto. Per quanto riguarda la rimozione di tutti i separatori, non è proprio questa la domanda, quindi è meglio ripristinare l'ultima modifica e / o eliminare completamente la risposta.
Se si desidera rimuovere lo spazio indesiderato in UITableview è possibile utilizzare due metodi di seguito
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
Ho aggiunto questa piccola estensione tableview che aiuta in tutto
extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}
Prova con questo
per l' obiettivo C
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.yourTableView.tableFooterView = [UIView new];
}
per Swift
override func viewDidLoad() {
super.viewDidLoad()
self.yourTableView.tableFooterView = UIView()
}
Nel caso in cui si dispone di un searchbar
nel vostro view
(per limitare il numero di risultati per esempio), si deve aggiungere anche il testo seguente shouldReloadTableForSearchString
eshouldReloadTableForSearchScope:
controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
In Swift (sto usando 4.0), puoi farlo creando una UITableViewCell
classe personalizzata e overriding
il setSelected
metodo. Quindi il separator insets
tutto a 0 . (la mia classe principale con la vista tabella ha uno sfondo chiaro) colore.
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)
}