ios datasource - Elimina i separatori extra sotto UITableView




uitableviewdelegate swift4 (25)

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?


Answers

se stai sottoclassando UITableView devi farlo ...

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

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
}

Ho avuto un po 'di fortuna nell'implementare un singolo pezzo della risposta accettata (iOS 9+, Swift 2.2). Ho provato a implementare:

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

Tuttavia, non ci sono stati effetti sul mio tableView - credo che possa avere qualcosa a che fare con il fatto che stavo usando UITableViewController .

Invece, ho dovuto solo sovrascrivere il metodo viewForFooterInSection (non ho impostato il 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).


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.


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(frame: CGRectZero)
}

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;


Veloce e facile Swift a 4 vie.

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

Se stai avendo celle statiche. Puoi anche disattivare il separatore dalla finestra Impostazioni. (questo non sarà desiderabile se hai bisogno del separatore. In tal caso usa il metodo mostrato sopra)


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

Basta aggiungere una vista con il colore del separatore desiderato come colore di sfondo, larghezza 100%, altezza 1px nella posizione x0 y-1 sul TableViewCell. Assicurati che tableViewCell non ritagli le subviews, invece dovrebbe tableView.

In questo modo si ottiene un separatore semplice e funzionante assoluto solo tra celle esistenti senza alcun hack per codice o IB.

Nota: su un rimbalzo superiore verticale compare il primo separatore, ma questo non dovrebbe essere un problema, perché è il comportamento predefinito di iOS.


Ho aggiunto questa piccola estensione tableview che aiuta in tutto

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

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

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

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

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


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


Per eliminare le linee di separatore extra dalla parte inferiore di UItableview a livello di codice, annota semplicemente le seguenti due righe di codice e rimuoverà il separatore extra da esso.

tableView.sectionFooterHeight = 0.f;

tableView.sectionHeaderHeight = 0.f;

Questo trucco funziona sempre per me, prova te stesso. @KPCoding ...


SWIFT 3.0 funziona alla grande con tableView.tableFooterView = UIView()


Per Swift:

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

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


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

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

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

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

Per iOS 7+ con Storyboard

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


basta aggiungere questo codice ( Swift ). .

tableView.tableFooterView = UIView()

Se vuoi aggiungere un colore evidenziato personalizzato alla tua cella (e la tua cella contiene pulsanti, etichette, immagini, ecc.) Ho seguito i seguenti passi:

Ad esempio se vuoi un colore giallo selezionato:

1) Crea una vista che si adatti a tutte le celle con un'opacità del 20% (con colore giallo) chiamata ad esempio backgroundselectedView

2) Nel controller della cella, scrivi questo:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     self.backgroundselectedView.alpha=1;
    [super touchesBegan:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundselectedView.alpha=0;
    [super touchesEnded:touches withEvent:event];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundSelectedImage.alpha=0;
    [super touchesCancelled:touches withEvent:event];
}




ios uitableview cocoa-touch