2017-08-29 4 views
0

Ich habe eine benutzerdefinierte UIView A erstellt, die in eine andere benutzerdefinierte UIView B eingebettet ist, weil ich Ansichten wiederverwenden möchte.Xcode Custom UIView wird nicht ordnungsgemäß angezeigt

(kann nicht mehr als 2 Bilder schreiben so weggelassen)

der SWIFT-Code I wird wie folgt verwendet:

override init(frame: CGRect) 
{ 
    super.init(frame: frame) 
    setupView() 
} 

required init?(coder aDecoder: NSCoder) 
{ 
    super.init(coder: aDecoder) 
    setupView() 
} 

private func setupView() 
{ 
    let view = viewFromNibForClass() 
    view.autoresizingMask = [ 
     .flexibleWidth, 
     .flexibleHeight 
    ] 
    view.frame = bounds 
    addSubview(view) 
} 

private func viewFromNibForClass() -> UIView 
{ 
    let bundle = Bundle(for: type(of: self)) 
    let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil).first as! UIView 
    return view 
} 

Wenn mehrere UIView A Platzieren (in einem Stapel) in UIView B, die Ansichten werden nach dem Zufallsprinzip springen nach oben links von der Superansicht, manchmal aus dem Rahmen der Ansicht. Ich muss die Größenänderungsmaske vorübergehend in diese ändern:

dann ändern Sie es zurück, nachdem die Anpassungen vorgenommen wurden. Aber immer noch, ich bin nicht in der Lage, irgendwelche einfachen Einschränkungen wie Höhe oder Entfernung zu superview.leading anwenden, ohne auf mehrere Konflikte.

Custom UIView B containing several UIView A

alle Konflikte lösen, muss ich jede Einschränkung löschen und fortzufahren. Wenn Sie dann UIView B in einem View-Controller in meinem Haupt-Storyboard platzieren, wird die Ansicht wieder in eine seltsame Position springen. Ich glaube, dass dies dem abnormalen Verhalten von UIView A in der ersten Abfrage zugeschrieben wird.

Generic view controller containing UIView B

Vielen Dank für jede Hilfe oder Zeiger!

Antwort

0

Nachdem ich jede Datei untersucht hatte (kurz vor dem Löschen und neu starten), erkannte ich, dass die XIB-Datei eine benutzerdefinierte Klasse im Identity Inspector referenzierte. Dies hatte wahrscheinlich dazu geführt, dass es seine init(coder aDecoder: NSCoder) rekursiv aufgerufen hat und somit seine Position aus dem Gleichgewicht geraten ist. Ich habe das nicht früher erkannt, da ich die benutzerdefinierten Ansichten ohne Auto-Layout verwendet habe und alles in Ordnung war. Und ja, der Besitzer der Datei der XIB wurde korrekt eingestellt. Der Fehler wurde entfernt und alles war gut.

Verwandte Themen