uitableviewcell - uitableviewdelegate ios




Elimina i separatori extra sotto UITableView (20)

Builder di interfaccia (iOS 9+)

Basta trascinare un UIView sul tavolo. Nello storyboard, si posiziona nella parte superiore sotto le celle personalizzate. Potresti preferire chiamarlo "footer".

Qui è mostrato in verde per chiarezza, probabilmente vorresti un colore chiaro.

Nota che regolando l'altezza, puoi influenzare il modo in cui viene gestito il "rimbalzo in basso" della tabella, come preferisci. (L'altezza zero di solito va bene).

Per farlo a livello di codice:

veloce

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

o se preferisci,

    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

Storicamente in iOS:

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

Quando imposto una vista tabella con 4 righe, ci sono ancora linee di separazione aggiuntive (o celle vuote extra) sotto le righe piene.

Come rimuoverò queste cellule?


Estensione Swift 4.0

Solo una piccola estensione per lo storyboard:

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

Per iOS 7+ con Storyboard

Basta trascinare un UIView in UITableView come footer. Imposta l'altezza della vista del piè di pagina su 0.


Avanzando la soluzione di J. Costa: puoi apportare una modifica globale al tavolo inserendo questa riga di codice:

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

all'interno del primo metodo poosible (di solito in AppDelegate, in: application: didFinishLaunchingWithOptions: method).


Ecco un altro modo per farlo senza lo stile della tabella raggruppata, e quello che probabilmente non indovinerai. Aggiungendo un'intestazione e un piè di pagina alla tabella (forse uno o l'altro è sufficiente, non selezionato) fa sì che i separatori scompaiano dal filler / righe 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 al posto di una cella di tabella con le dita carnose. Ecco un metodo per inserire una vista vuota come intestazione e piè di pagina. Usa l'altezza desiderata, ma elimina le linee di separazione aggiuntive.

- (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'archivio iTunes ...) e ho cortocircuitato il metodo addHeaderAndFooter per verificare. Senza di esso , ho i separatori di riga aggiuntivi; con il codice, ho quello che vedi in questa finestra di scatto: nessuna tabella separatori di righe immagine . Quindi non sono sicuro del motivo per cui non avrebbe funzionato per te. Inoltre, ha senso per me che avere un piè di pagina personalizzato su una vista tabella debba necessariamente interrompere il disegno dei separatori di riga per le righe vuote sotto di esso. Sarebbe orribile. Come riferimento, ho esaminato le tabelle in cui c'erano più file di quante potrebbero essere visualizzate sullo schermo e quindi per un tavolo 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 della tabella, il piè di pagina non è stato impostato.


Ho aggiunto questa piccola estensione tableview che aiuta in tutto

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

In Swift (sto usando 4.0), puoi farlo creando una classe personalizzata UITableViewCell e sovrascrivendo il metodo setSelected. Quindi il separatore inserisce 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)
}

Nel caso in cui si disponga di una barra di ricerca in vista (per limitare il numero di risultati, ad esempio), è necessario aggiungere anche quanto segue in shouldReloadTableForSearchString e shouldReloadTableForSearchScope:

controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];

Potresti trovare molte risposte a questa domanda. La maggior parte di essi riguarda la manipolazione con l'attributo tableFooterView UITableView e questo è il modo corretto per nascondere le righe vuote. Per comodità ho creato un'estensione semplice che consente di attivare / disattivare le righe vuote da Interface Builder. Puoi verificarlo in questo file gist . Spero possa risparmiare un po 'di tempo.

-(void)didMoveToSuperview {
    [super didMoveToSuperview];
    self.tableFooterView = [UIView new];
}

Uso:

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


Prova questo

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

Puoi semplicemente aggiungere un piè di pagina vuoto alla fine, quindi nasconderà le celle vuote ma apparirà anche piuttosto brutto:

tableView.tableFooterView = UIView()

C'è un approccio migliore: aggiungi una riga di 1 punto alla fine della visualizzazione tabella come il piè di pagina e anche le celle vuote non saranno 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


Rimozione di linee di separazione aggiuntive 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()
}

Se non vuoi alcun separatore dopo l'ultima cella, allora hai bisogno di un'altezza vicina allo zero ma non zero per il tuo footer.

Nel tuo UITableViewDelegate :

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

Se si desidera rimuovere lo spazio indesiderato in UITableview, è possibile utilizzare due metodi

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0.1;
}

So che questa domanda è stata accettata, ma ho messo qui diversi modi per nascondere la riga di separazione Extra di UITableView .

È possibile nascondere la riga di separazione standard di tableView e aggiungere la riga personalizzata nella parte superiore di ogni cella.

Aggiornare:

Il modo più semplice per aggiungere un separatore personalizzato è aggiungere un semplice UIView di altezza UIView :

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

O il modo migliore e semplice che mi piace è

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

Prova qualcuno di uno;


Stavo usando una vista tabella per mostrare un numero fisso di righe ad altezza fissa, quindi l'ho semplicemente ridimensionato e reso non scorrevole.


Vorrei estendere la risposta wkw :

Semplicemente aggiungendo solo 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 imposti la tua tableview, aggiungi questa linea:

//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 qualsiasi separatore:

[_tableView setTableFooterView:[UIView new]];

Grazie ancora a wkw :)


basta aggiungere questo codice ( Swift ). .

tableView.tableFooterView = UIView()

uitableview extra separator line nascondi linee extra separator hide in swift 3.0

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

UIKit non crea celle vuote quando tableView ha un tableFooterView . Quindi possiamo fare un trucco e assegnare un oggetto UIView altezza zero come footer di tableView .

tableView.tableFooterView = UIView()




cocoa-touch