Machen Sie eine benutzerdefinierte UIView Untersicht, füllt seinen superview
Also schrieb ich meine eigene benutzerdefinierte Sicht mit seiner eigenen Initialisierung. Aber wenn meine Haupt-Ansicht lädt meine benutzerdefinierte Ansicht wird dargestellt in einer falschen Art und Weise. Es braucht Grenzen als 600x600 Rechteck, während die superview ist 375x607. Ich versuchte mit auto-constraint, scheint nicht zu funktionieren. Ich versuchte es programmatisch in der Untersicht der Initialisierung, aber immer wenn ich versuche zu initialisieren, die bounds-Eigenschaft zu seinem superview Grenzen bekomme ich null in superview.
override init(frame: CGRect) {
super.init(frame: frame)
self.setup()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
}
func setup() {
initPathLayer()
initHandleView()
initHandlePanGestureRecognizer()
layoutPathLayer()
layoutHandleViews()
}
Habe ich versucht, alles, was da ist, auf dem internet zu machen Untersicht füllen seine superview, aber ich denke, dass die Untersicht wird initialisiert, bevor superview? Ist das möglich ? In der ViewController einen haben meine benutzerdefinierte Ansicht erklärt, wie eine Steckdose-Verbindung. Ich bin mir sicher, dass das problem sein sollte super einfach und es ist mir, wer kennt Sie nicht, die Art und Weise Swift die Ansicht initialisiert.
Irgendwelche Ideen ?
Danke.
- Versuchen Sie, die zeigen, welche Einschränkungen Sie Hinzugefügt, dass sollte funktionieren. Sonst ist die Methode layoutSubviews, die Sie überschreiben können, um explizit den Rahmen
- Die Sache ist, dass der unteransicht nicht zu sehen sein superview, bis es initialisiert wird. Ich mache Screenshot mit Einschränkungen
- Schauen Sie einfach nur auf Ihren code, den Sie nur mit layout-Methoden innerhalb von layoutSubviews
- Danke!!! Das war es eben. Wie gesagt, es war ein sehr kleines problem und die Ursache davon war meine Unerfahrenheit.
- Haha keine Sorge, aber Sie sollten auf jeden Fall in der Lage sein zu vertreten, diese in Einschränkungen, so bin ich besorgt, dass das nicht funktioniert
- Ich stellte eine umfassende Lösung für Ihre Frage, lassen Sie mich wissen, wenn es hilft
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens, einen Blick auf die init-Methode ist nicht der beste Ort, um führen Sie ein layout. Der Blick könnte in der Größe verändert werden, zu einem späteren Zeitpunkt, das ist normalerweise immer der Fall, wenn die Ansicht geladen wird, eine Xib-oder Sie schaffen es in einer View-Controller
viewDidLoad
Funktion.Dass gesagt wird, Sie habe mehrere Ansätze:
1. Verwenden Sie Auto-Layout
Interface Builder
Diese kann getan werden, entweder im Interface Builder oder programmgesteuert. Im Interface Builder verwenden Sie einfach den " Pin " - option und wählen Sie alle Seiten der Ansicht
Wenn dies geschehen ist, sollten Sie in der Lage sein zu sehen, Ihre Einschränkungen in der Größe inspector suchen, wie folgt:
Programmgesteuert
Alternativ können Sie immer Ihre Einschränkungen programmgesteuert in Ihre Initialisierer:
2. Manuelle Layout -
Größenänderung Masken
HIERFÜR können Sie entweder die Größenänderung von Masken, oder Sie können die Rahmen in layoutSubviews. Größenänderung Masken, dem system mitzuteilen, wie der Blick so groß sein sollte, relativ zu den superview:
Layout Untersichten
Schließlich können Sie layoutSubviews überschreiben und gehen von dort aus: