Swift: Wiederverwendbare UIView in der storyboard-und Größenanpassung Einschränkungen
Ich versuche, erstellen Sie eine wiederverwendbare UIView in Swift, die kann ich plug in mein Storyboard view-Controller. Mein key Problem jetzt ist, dass die wiederverwendbaren UIView "widget" nicht voll fit in die UIView-box in der storyboard. Ich folgte dieses tutorial zum einrichten der wiederverwendbare UIView-widget
-
Erstellt eine Unterklasse von UIView und eine entsprechende .xib -- und Verband diese:
import UIKit class MyWidgetView: UIView { @IBOutlet var view: UIView!; required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder); NSBundle.mainBundle().loadNibNamed("MyWidgetView", owner: self, options: nil); self.addSubview(self.view); } }
-
In der XIB, das ist die interface Datei entsprechend dem obigen code, den ich verwendet UIView mit Freiform-Größe unter Simulated Metrics und Skala zu Füllen, unter Ansicht-Modus.
-
In der Haupt-storyboard, ich habe eine UIView-block (gleiche rechteckige Form) und änderte die Klasse, um MyWidgetView
-
Funktioniert es, aber die Komponenten die ich erstellt der XIB-gequetscht in der eigentlichen app, trotz der Tatsache, dass ich layout-constraints in den beiden XIB-und auch das Haupt-storyboard.
Siehe screenshot. Der rosa Teil nicht erscheinen soll, denn das ist nur eine Farbe der UIVIew auf das Haupt-storyboard, die ich Hinzugefügt, testen Sie die Dimensionierung. Dass UIView ist eigentlich MyWidgetView (nach wechselte ich die Klasse, die in Schritt 3. So in der Theorie, da MyWidgetView == die UIView auf das Haupt-storyboard, und dass UIView hat Einschränkungen, die machen es rechteckig in der superview ist, warum ist dann mein widget gequetscht? Der Blaue Teil unten erweitern sollte allen Weise Recht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die eigentlichen view-Hierarchie geladen, aus der nib-Datei in Ihrem code Hinzugefügt wird, über
self.addSubview(self.view)
. So, den Rahmen Ihresself.view
eigentlich keine Beziehung mit dem Mutterunternehmen, D. H.MyWidgetView
.Können Sie wählen, entweder indem Sie Layoutbeschränkungen durch code oder nur die Einstellung sein Bild nach Hinzugefügt als Untersicht. Ich persönlich bevorzuge letzteres. In meinem experiment, das folgende ist, was für mich funktioniert. Ich bin mit Xcode 6.4, die ich denke, ist nicht das gleiche, wie deine.
NSBundle.loadNibNamed()
ist Ein array mit den top-level-Objekte in der nib-Datei. In unserem Fall gibt es nur eine top-level-Objekt: Eine Ansicht mit all IhrenMyWidgetView
view-Hierarchie. So, nach einem erfolgreichen Aufruf vonloadNibNamed
nahmen wir die erste und einzige, der Ansicht alsnibRoot
, und fügen Sie es als eine Untersicht.Alternativ die variable frame überschrieben werden können. Dieser code funktionierte für mich, wenn CardImgText wurde eingestellt, um Dateien, die Eigentümer für die Ansicht.
wenn Sie mehr Interesse an Effizienz als Echtzeit-Update. Dann ersetzen :
mit: