web-dev-qa-db-fra.com

UITableView + Ajouter un décalage de contenu en haut

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 ou ajouter une cellule vide n'est PAS ce que je veux faire. Au lieu de cela, je veux juste un décalage.

Comment?

80
bluefloyd8

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, j'ai ajouté:

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

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

Alternativement 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)
273
jigzat

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

Si vous avez besoin d'un décalage permanent et que vous n'utilisez pas déjà des 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, surtout si vous n'avez qu'une seule section, cela pourrait vous donner l'apparence d'un décalage permanent .

Je peux poster un exemple de code si cela ressemble à ce que vous recherchez.

5
scottbates22

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.

4
richy

On dirait que vous voulez envelopper une 'Vue' autour de votre UITableView. Si vous avez un UITableViewController dans IB, le UITableView sera automatiquement défini sur le view de UITableViewController. Vous changez la propriété view en une UIView normale et ajoutez votre UITableView dedans 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 UITableViewController vous obtenez ceci (en pseudo code):

UITableViewController.view = UITableView

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

UITableViewController.view = UIView

et ajoutez votre table à ce UIView

2
willcodejavaforfood

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

Pour que la tableView apparaisse en haut de l'encart de contenu, afin 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];
0
TheJeff