web-dev-qa-db-fra.com

Obtenir la hauteur du cadre sans la hauteur de la barre de navigation ni la hauteur de la tabulation dans la hiérarchie de vues la plus profonde

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é)

15
Darko D.

Utilisez ceci :

let height = UIApplication.sharedApplication().statusBarFrame.height +
self.navigationController!.navigationBar.frame.height

ce support portrait et paysage état.

34
Ehsan Jelodar

Pour UITabBar, ce code fonctionne: 

self.tabBarController?.tabBar.frame.height
6
MichelRobico

Pour Swift 3

navBarHeight = (self.navigationController?.navigationBar.intrinsicContentSize.height)! 
+ UIApplication.shared.statusBarFrame.height
0
Matthew Harries