2014-12-18 9 views
5

Ich lade eine Ansicht von einem xib mithilfe von Autolayout- und Größenklassen. Innerhalb dieser Ansicht gibt es eine Unteransicht, viewWithSizeClasses, mit einer Einschränkung der Höhe, die von der Größenklasse abhängt.Abrufen von Integritätsbedingungen mithilfe von loadNibNamed und Größenklassen

Ich versuche, Einschränkungen direkt nach loadNibNamed zu laden, um die richtige Höhe gemäß der aktuellen Größenklasse zu erhalten.

Ich habe versucht, verschiedene Kombinationen von layoutSubviews(), updateConstraints() aber egal was ich tue ich bin immer die Standard immer jeder, jeder Höhe.

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 
} 

Ich bin auf iOS8 oder neuer bereitstellen.

+0

Haben Sie das jemals behoben? –

+1

Nein, anscheinend ist das nicht möglich. : -/ –

+0

Also Größenklassen sind außerhalb Storyboard grundsätzlich nutzlos? :/ –

Antwort

0

Ich rannte in die gleichen Schwierigkeiten versuchen, die gleiche Xib mit separaten Einschränkungen für iPhone vs iPad zu verwenden. Meine Lösung bestand darin, für jede Größenklasse innerhalb derselben XIB eine Ansicht zu erstellen. Rufen Sie dann beim Laden der Xib die entsprechende Ansicht nach Index auf. In meinem Fall meine Any-Any size-Klasse ist bei Index 0 und Regular-Regular bei Index 1.

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

Ich bin sicher, dass Sie das Swift übersetzen. Ich habe auch ein globales Makro definiert

#define IS_IPAD (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) 
Verwandte Themen