2014-12-18 12 views
5

Sto caricando una vista da un xib utilizzando l'Autolayout e le classi di dimensioni. All'interno di questa vista c'è una sottoview, viewWithSizeClasses, con un vincolo sulla sua altezza che dipende dalla classe di dimensioni.Ottenere i vincoli utilizzando loadNibNamed e Classi di dimensioni

Quello che sto cercando di fare è caricare i vincoli subito dopo loadNibNamed in modo da ottenere l'altezza corretta in base alla classe di dimensione corrente.

ho provato varie combinazioni di layoutSubviews(), updateConstraints() ma non importa quello che faccio che sto ottenendo sempre il default Qualsiasi, Qualsiasi altezza.

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    let xibView = NSBundle.mainBundle().loadNibNamed("View", owner: self, options: nil).first as View 

    self.view.addSubview(xibView) 
    height = xibView.viewWithSizeClasses.frame.size.height // <- Any, Any height 
} 

che sto distribuzione su iOS 8 o più recente.

+0

L'hai mai risolto? –

+1

No, apparentemente questo non è possibile. : -/ –

+0

Quindi le classi di grandezza sono praticamente inutili al di fuori dello Storyboard? :/ –

risposta

0

Mi sono imbattuto nello stesso problema cercando di utilizzare lo stesso xib con vincoli separati per iPhone vs iPad. La mia soluzione era di creare una vista per ogni classe di dimensione all'interno dello stesso xib. Quindi, quando si carica lo xib, accedere alla vista corretta per indice. Nel mio caso, il mio Qualsiasi-Qualsiasi classe dimensionale è in corrispondenza dell'indice 0 e regolare-Regular di indice 1.

NSArray *views = [NSBundle.mainBundle loadNibNamed:NSStringFromClass(self.class) owner:self options:nil]; 
UIView *view = views[IS_IPAD]; 

Sono sicuro che si può tradurre che a Swift. Ho anche definito una macro globale

#define IS_IPAD (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)