it-swarm.com.de

Rufen Sie die Rahmenhöhe ohne Höhe der Navigationsleiste und Höhe der Registerkartenleiste in einer tieferen Ansichtshierarchie ab

Ich habe einen ViewController (B), der von einem PageViewController behandelt wird, der sich in einem anderen ViewController (A) befindet und modal öffnet. Ich habe den ViewController (B) genau in der Mitte des Bildschirms zentriert. Das funktioniert gut.

Wenn ich jedoch den ViewController (A) von einem NavigationController aus schiebe, ist der Rahmen von ViewController (B) zu groß und erstreckt sich unterhalb der Navigationsleiste und der Tableiste. Aber ich möchte, dass es sich zwischen der Navigationsleiste und der Tableiste befindet.

Ich weiß, wie ich die Höhe der Navbar und der Tabbar ermitteln kann, um ViewController (B) in der Größe zu verändern:

var topBar = self.navigationController?.navigationBar.frame.height
var bottomBar = self.tabBarController?.tabBar.frame.height

Dies funktioniert jedoch nicht tief in den vier Hierarchien in ViewController (B). self.navigationController und self.tabBarController sind null. Wie kann ich also die Höhe der Navbar und der Tabbar in der Ansichtshierarchie tiefer einordnen? Oder muss ich es einfach von einem ViewController an einen anderen weitergeben, bis ich ViewController (B) erreiche? Oder gibt es eine andere offensichtliche Möglichkeit, die Ansicht zu zentrieren? Vielen Dank.

(Ich habe versucht, Screenshots zum besseren Verständnis zu posten, aber ich vermisse die erforderlichen Ansehenspunkte, um Bilder zu veröffentlichen, sorry)

15
Darko D.

Benutze das :

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

diese unterstützung porträt und landschaft zustand.

34
Ehsan Jelodar

Für UITabBar funktioniert dieser Code: 

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

Für Swift 3

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