J'ai un tableViewController personnalisé que j'ajoute à un TabBarController avec
self.tabBarController.viewControllers = [NSArray arrayWithObjects:someOtherViewController, customTableViewController, nil];
self.tabBarController.selectedIndex = 1;
Le problème que je rencontre est que les 1,5 dernières tablesViewCells sont couvertes par la barre d’onglet en bas de l’écran sur un iPhone 4 sous iOS7. Lorsque j'utilise le simulateur iOS - iPhone Retina (4 pouces)/iOS 7.0, le problème persiste.
Quelle est la bonne façon de faire en sorte que tableView s'aligne avec le haut de la barre de tabulation en bas de l'écran sans utiliser de "nombres magiques"?
Essayez ceci pour votre CustomViewController:
- (void)viewDidLoad
{
[super viewDidLoad];
UIEdgeInsets adjustForTabbarInsets = UIEdgeInsetsMake(0, 0, CGRectGetHeight(self.tabBarController.tabBar.frame), 0);
self.scrollView.contentInset = adjustForTabbarInsets;
self.scrollView.scrollIndicatorInsets = adjustForTabbarInsets;
}
C'est une solution iOS 8 mais cela peut fonctionner sous iOS 7 pour: Aller dans le storyboard> sélectionner le contrôleur de vue de table> décocher "Sous les barres inférieures". C'est tout!
Définir la contentInset
de votre vue table avec une valeur .bottom
de 49 points devrait corriger cela.
Dans les bonnes configurations, la définition de YES
pour la nouvelle propriété UIViewController sur iOS 7 appelée automaticallyAdjustsScrollViewInsets
devrait y remédier, mais (encore une fois), cela dépend de nombreux autres facteurs (hiérarchie de vues, paramètres du contrôleur de vue parent, etc.).
La réponse acceptée ne fonctionne pas vraiment pour moi - ma configuration est un peu différente. Je crée par programme mes contrôleurs de vue. La racine de mon application est un contrôleur de barre d'onglets. Un des onglets est un contrôleur de navigation dont la racine est une UIViewController
avec une vue sous forme de tableau comme vue principale.
Ce qui fonctionne pour moi, c’est quand j’ai calculé manuellement la hauteur de la vue tabulaire et que je l’ai défini dans le cadre lors de l’allocation de la vue tabulaire. La formule générale est:
hauteur de l'écran - (hauteur de la barre d'état + hauteur de la barre de navigation + hauteur de la barre d'onglets)
CGFloat bottom = self.tabBarController.tabBar.frame.size.height;
NSLog(@"%f",bottom);
[self.tableview setScrollIndicatorInsets:UIEdgeInsetsMake(0, 0, bottom, 0)];
self.tableview.contentInset = UIEdgeInsetsMake(0, 0, bottom, 0);
Intégrez votre contrôleur de table dans un contrôleur de navigation. 1. sélectionnez la vue dans le story board . 2. Dans la barre de menus, sélectionnez Editeur -> intégrer dans -> contrôleur de navigation.
J'espère que cela pourra aider
J'ai une hiérarchie de vues similaire à Matt Quiros : UITabBarController -> UINavigationController -> UIViewController -> UITableViewController (intégré à une sous-vue de UIViewController). Les autres réponses ne fonctionnaient pas dans mon cas et je devais définir le cadre de la vue tableau manuellement dans la méthode viewWillAppear:
du contrôleur de vue tableau.
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Adjust height of tableview (does not resize correctly in iOS 7)
CGRect tableViewFrame = self.tableView.frame;
tableViewFrame.size.height = [self heightForTableView];
self.tableView.frame = tableViewFrame;
}
- (CGFloat)heightForTableView
{
return CGRectGetHeight([[UIScreen mainScreen] bounds]) -
(CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]) +
CGRectGetHeight(self.navigationController.navigationBar.frame) +
CGRectGetHeight(self.tabBarController.tabBar.frame));
}
Si quelqu'un trouve une meilleure solution, partagez-la!
Vous pouvez également implémenter viewDidLayoutSubviews
et utiliser bottomLayoutGuide
pour obtenir la hauteur de la barre de tabulation:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
CGFloat bottomOffset = self.bottomLayoutGuide.length;
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, bottomOffset, 0);
}
Bien que la modification de contentInset de votre vue de table soit une solution efficace, je trouve mieux de m'assurer que votre vue de table s'arrête avant la barre d'onglets.
Comme l'a dit Paul Newman, utiliser bottomLayoutGuide est une bonne chose, en particulier si vous utilisez autolayout . Dans mon cas, ajouter une contrainte au bas de la vue tableau reliant le haut du BottomLayoutGuide était une solution propre. exemple avec Storyboard, mais cela peut aussi être fait en code.
J'espère que ça aide.
Je pense que cela fonctionnerait mieux pour vous:
Après [super viewDidLoad];
essayez le code suivant:
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;