2017-10-20 47 views
0

Je travaille sur une application où j'ai un NavigationBar en haut et j'ai ajouté un UIViewController en tant que RootViewController.UIViewController caché derrière UINavigationController mais devrait être placé en dessous de

Maintenant, mon plan était d'ajouter une nouvelle sous-vue à ce UIViewController. La nouvelle sous-vue étendue également de UIViewController. J'ai ajouté de view (Gray Rect) du contrôleur au UIViewController mais il est placé derrière le NavigationBar. Je ne veux pas ça .. Alors j'ai cherché une solution et trouvé quelque chose d'intéressant ..: Quand je viens d'ajouter un UIView() (Green Rect) à l'UIViewController, le placement de la vue fonctionne parfaitement, comme j'aimerais le voir de l'autre UIViewController-View. enter image description here Mon code ressemble à ce qui suit:

class DashboardController: UIViewController { 

var ccview:ContactCircleController! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    edgesForExtendedLayout = [] 
    self.view.backgroundColor = .white 

    let test = UIView() 
    test.backgroundColor = .green 
    test.frame = CGRect(x: self.view.frame.width - 200, y: 0, width: self.view.frame.width/2, height: self.view.frame.width/2) 
    self.view.addSubview(test) 
    setup() 
} 

func setup(){ 
    ccview = ContactCircleController() 

    ccview.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width/2, height: self.view.frame.width/2) 
    ccview.edgesForExtendedLayout = UIRectEdge.top 
    self.view.addSubview(ccview.view) 
}} 

je l'ai déjà décoché la « Extend » Arêtes - bascule du NavigationController sur le story-board. J'ai également ajouté edgesForExtendedLayout = [] à UIViewController et pour l'UIView cela a bien fonctionné. Mais pour la vue d'un autre UIViewController ... ça n'a pas marché.

Merci!

Répondre

0

Si vous utilisez Debug Afficher la hiérarchie, vous verrez que votre gris ccview.view est pas derrière la barre de navigation, mais il n'est pas tenue la hauteur de self.view.frame.width/2.

En effet, le .view d'un UIViewController instancié de Storyboard a par défaut un .autoresizingMask = [], alors que le .view d'un UIViewController instancié sans story-board a une valeur par défaut .autoresizingMask = [.flexibleWidth, .flexibleHeight].

Vous pouvez corriger cela en changeant setup() à:

func setup(){ 
    ccview = ContactCircleController() 

    ccview.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width/2, height: self.view.frame.width/2) 

    // remove this line 
    //ccview.edgesForExtendedLayout = UIRectEdge.top 

    // add this line 
    ccview.view.autoresizingMask = [] 

    self.view.addSubview(ccview.view) 
}