UITableView + Ajouter un décalage de contenu en haut

86

J'ai besoin d'ajouter un espace vide en haut de mon UITableView qui n'affecte pas la taille de la zone de contenu. Décaler le contenu vers le bas ou ajouter une cellule vide n'est PAS ce que je veux faire. Au lieu de cela, je veux juste un décalage.

Comment?

bluefloyd8
la source

Réponses:

288

Je ne sais pas si je vous suis mais je pense que j'ai la même situation. Dans mon cas, je dois donner un peu d'espace à ADBannerView en haut de l'écran, donc ce que j'ai fait était dans la méthode viewDidLoad que j'ai ajoutée:

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

les valeurs qu'il prend sont UIEdgeInsetsMake (haut, gauche, bas, droite).

Sinon, la même chose avec Swift:

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

Swift 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
jigzat
la source
1
J'avais besoin de cela pour ne pas afficher une cellule de "chargement" en haut, pour revenir à l'encart ego lorsque cette cellule est rendue, revenir en haut de -50 lorsque reloadData se produit. Merci !
Daniel
23
Vous pouvez également ajuster l'indicateur de défilement: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev
8
Oui, ou mieux encore, ajustez l'indicateur de défilement comme ceci: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
David Hernandez
5

Vous pouvez ajouter une vue d'en-tête "vide" à la table ... cela donnerait l'apparence initiale de la table pour avoir un décalage, mais une fois que vous avez commencé à faire défiler, le décalage disparaîtrait. PAS sûr que c'est ce que vous voulez.

Si vous avez besoin d'un décalage permanent et que vous n'utilisez pas déjà les en-têtes de section, vous pouvez créer le décalage de la même manière que ci-dessus en créant des vues personnalisées pour les en-têtes de section, en particulier si vous n'avez qu'une seule section, cela pourrait vous donner l'apparence d'un décalage permanent. .

Je peux publier un exemple de code s'il semble que l'un de ces éléments correspond à ce que vous recherchez.

scottbates22
la source
4

J'ai combiné la réponse de Jigzat avec:

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

dans

- (void)viewDidLoad

donc la première cellule n'est pas en haut.

Richy
la source
4

Swift 5.1

ajoutez ce qui suit dans viewDidLoad

tableView.contentInset.top = 100

C'est vraiment tout ce qu'il y a à faire.

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = 100
}
Rom4in
la source
2

On dirait que vous voulez envelopper une «vue» autour de votre UITableView. Si vous avez un UITableViewControllerdans IB, le UITableViewsera automatiquement réglé sur le viewde UITableViewController. Vous changez la viewpropriété à une normale UIViewet ajoutez votre UITableViewici et lui donnez un décalage.

--- Modifier --- Je viens de lire mon article et j'ai pensé que cela n'avait pas de sens :) Lorsque vous créez un, UITableViewControllervous obtenez ceci (en pseudo code):

UITableViewController.view = UITableView

Cela signifie que la table réelle occupera tout l'espace et que vous ne pouvez même pas ajouter d'autres vues. Vous devez donc changer le

UITableViewController.view = UIView

et ajoutez votre table à cela UIView

willcodejavaforfood
la source
0

J'ai combiné cette réponse avec celle-ci: https://stackoverflow.com/a/9450345/1993937

Pour faire apparaître tableView en haut de l'encart de contenu, de sorte que l'espace en haut ne soit pas coupé en faisant défiler légèrement la tableView lorsque la vue apparaît initialement. (18 est mon premier écart)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
TheJeff
la source