UITableView + Aggiungi offset del contenuto in alto


86

Devo aggiungere uno spazio vuoto nella parte superiore del mio UITableView che non influisce sulle dimensioni dell'area del contenuto. Spostare il contenuto verso il basso o aggiungere una cella vuota NON è quello che voglio fare. Invece voglio solo un offset.

Come?

Risposte:


288

Non so se ti sto seguendo, ma penso di avere la stessa situazione. Nel mio caso devo dare un po 'di spazio ad ADBannerView nella parte superiore dello schermo, quindi quello che ho fatto è stato nel metodo viewDidLoad che ho aggiunto:

[self.tableView setContentInset:UIEdgeInsetsMake(50,0,0,0)];

i valori utilizzati sono UIEdgeInsetsMake (in alto, a sinistra, in basso, a destra).

In alternativa lo stesso con Swift:

self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

Swift 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)

1
Necessario per non mostrare una cella di "caricamento" in alto, torna a ego inset quando quella cella viene renderizzata, torna a -50 in alto quando si verifica reloadData. Grazie !
Daniel

23
Potresti voler regolare anche l'indicatore di scorrimento: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev

8
Sì, o anche meglio, regola l'indicatore di scorrimento in questo modo: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
David Hernandez

5

Puoi aggiungere una vista di intestazione "vuota" alla tabella ... questo darebbe all'aspetto iniziale della tabella un offset, ma una volta iniziato a scorrere l'offset sarebbe sparito. Non sono sicuro che sia quello che vuoi.

Se hai bisogno di un offset permanente e non stai già utilizzando le intestazioni di sezione, puoi creare l'offset in modo simile a sopra creando viste personalizzate per le intestazioni di sezione, specialmente se hai solo una sezione, questo potrebbe darti l'aspetto di un offset permanente .

Posso pubblicare un codice di esempio se sembra che uno di questi sia quello che stai cercando.


4

Ho combinato la risposta di Jigzat con:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 320, 1) animated:NO];

nel

- (void)viewDidLoad

quindi la prima cella non è in alto.


4

Swift 5.1

aggiungere quanto segue in viewDidLoad

tableView.contentInset.top = 100

Davvero questo è tutto quello che c'è da fare.

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = 100
}

2

Sembra che tu voglia avvolgere una "Vista" attorno al tuo file UITableView. Se hai un UITableViewControllerin IB, UITableViewverrà automaticamente impostato su viewdi UITableViewController. Cambia la viewproprietà in una normale UIViewe aggiungi la tua UITableViewlì e dagli un offset.

--- Modifica --- Ho appena letto il mio post e ho pensato che avesse poco senso :) Quando crei un UITableViewController, ottieni questo (in pseudo codice):

UITableViewController.view = UITableView

Ciò significa che la tabella effettiva occuperà l'intero spazio e non potrai nemmeno aggiungere altre visualizzazioni. Quindi è necessario modificare il file

UITableViewController.view = UIView

e aggiungi il tuo tavolo a quello UIView


0

Ho combinato questa risposta con questa: https://stackoverflow.com/a/9450345/1993937

Per fare in modo che tableView appaia nella parte superiore del riquadro del contenuto, in modo che lo spazio in alto non venga tagliato facendo scorrere leggermente tableView verso il basso quando viene visualizzata inizialmente la visualizzazione. (18 è il mio gap superiore)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.