J'ai un ViewController (B) qui est géré par un PageViewController qui est à l'intérieur d'un autre ViewController (A) et l'ouvre modal. J'ai centré le ViewController (B) exactement au milieu de l'écran. Cela fonctionne bien.
Mais lorsque j'appuie sur le ViewController (A) depuis un NavigationController, le cadre de ViewController (B) est trop grand et s'étend au-dessous de la barre de navigation et de la barre de contrôle. Mais je le veux centré entre la barre de navigation et la barre de tabulation.
Je sais comment obtenir la hauteur de la barre de navigation et de la barre de tabulation pour redimensionner ViewController (B):
var topBar = self.navigationController?.navigationBar.frame.height
var bottomBar = self.tabBarController?.tabBar.frame.height
Mais cela ne fonctionne pas au fond de la hiérarchie de vier dans ViewController (B). self.navigationController et self.tabBarController sont nil. Alors, comment puis-je obtenir la hauteur de la barre de navigation et de la barre de tabulation plus profondément dans la hiérarchie des vues? Ou dois-je simplement le transmettre d'un ViewController à un autre jusqu'à atteindre ViewController (B)? Ou existe-t-il un autre moyen plus évident de centrer la vue? Merci.
(J'ai essayé de poster des captures d'écran pour une meilleure compréhension, mais je manque les points de réputation nécessaires pour poster des images, désolé)
Utilisez ceci :
let height = UIApplication.sharedApplication().statusBarFrame.height +
self.navigationController!.navigationBar.frame.height
ce support portrait et paysage état.
Pour UITabBar, ce code fonctionne:
self.tabBarController?.tabBar.frame.height
Pour Swift 3
navBarHeight = (self.navigationController?.navigationBar.intrinsicContentSize.height)!
+ UIApplication.shared.statusBarFrame.height