Ich habe eine benutzerdefinierte Unterklasse von UIView in meiner iOS-Anwendung gemacht, und ich versuche, die berechneten Größen der Ansicht in der Ansicht init-Methode zu erhalten, damit ich sie beim Erstellen von Unteransichten verwenden kann in der benutzerdefinierten Ansicht.Größe von UIView in init
Die benutzerdefinierte Ansicht befindet sich in einer Stapelansicht, die meiner Ansicht 1/3 der Gesamtgröße (Hauptansicht) zuweist.
Mein init sieht wie folgt aus:
var mySubView: UIImageView
required init?(coder aDecoder: NSCoder) {
mySubView = UIImageView()
super.init(coder: aDecoder)
let viewWidth = Int(self.frame.size.width)
let viewHeight = Int(self.frame.size.height)
mySubView.frame = CGRect(x: 0, y: 0, width: viewWidth, height: viewHeight)
mySubView.backgroundColor = UIColor.cyan
self.addSubview(mySubView)
}
jedoch die Höhen und Breiten sind nicht korrekt gemeldet. Zum Beispiel füllt mySubView oben nur etwa die Hälfte des gesamten Speicherplatzes der benutzerdefinierten Ansicht aus.
Jede Hilfe würde sehr geschätzt werden!
Ich glaube nicht die Sicht weiß, dass es Dimensionen an dieser Stelle während seines Lebenszyklus. Versuchen Sie, die Dimensionen in 'viewWillAppear' zu erhalten – toddg
Sie können nicht, nicht, wenn es die View-Controller-Ansicht ist. Es ist zu früh im Lebenszyklus des View-Controllers. Sie müssen warten, bis (frühestens) UIViewController.viewWillViewSubviews(). Aus diesem Grund sollten Sie wahrscheinlich Auto-Layout-Einschränkungen verwenden, von denen viele bereits in einer Stapelansicht behandelt werden. Erstellen Sie Ihre benutzerdefinierte Ansicht, fügen Sie die Untersichten und Einschränkungen (entweder in IB oder Code) zur benutzerdefinierten Ansicht hinzu, und die Elemente werden so angeordnet, wie Sie sie benötigen. – dfd
@toddg ist korrekt, die Alternative zu viewWillLayoutSubviews() (verwendet von UIViewController) ist ViewWillAppear() (von UIView verwendet). Ich tendiere dazu, in Bezug auf den View-Controller zu denken. ACHTUNG: Ich glaube, dass beide Funktionen mehr als einmal beim Laden aufgerufen werden können, und auch auf Dinge wie Orientierungsänderungen (und im iPad, Multitasking). – dfd