2016-08-08 55 views
0

ich eine UIView haben subclassed zu machen und erstellt einige Ansichten in seinem Inneren. Ich möchte eine Instanz dieser Ansicht in der Ansicht meines View-Controllers erstellen und es gibt eine weitere benutzerdefinierte Ansicht, die unterhalb dieser Ansicht platziert wird. Ich bin mir nicht sicher, wie ich die zweite Ansicht unter meine erste Sicht stelle.eine Super Resize seiner Größe gleich der der Größe seiner Subviews

Wenn ich die Rahmen debuggen, ich {{0,0}, {0,0}}. Ich benutze Mauerwerk für Ansichtslayout. Ich habe versucht, verschiedene Lösungen von this thread

ich ein Beispielprojekt erstellt haben, die den eigentlichen Code habe ich versucht habe. https://github.com/anuj-rajput/ViewSample

In diesem Beispielprojekt gibt es zwei Unterklassen von UIView, PhoneVerificationTopView und PhoneVerificationPhoneNumberView und ein View-Controller PhoneVerificationViewController der Objekte aus diesen beiden Ansichten erzeugt. Ich muss sie perfekt so anordnen, dass sie vertikal perfekt ausgerichtet sind (PhoneNumberView unter TopView).

Mache ich etwas falsch? Gibt es einen richtigen Weg, eine UIView von einer Unterklasse zu trennen und sie dann im Controller zu verweisen?

Dies ist, wie die Ansicht wie

Screenshot

+0

Sie Projekt für mich nicht kompilieren. Welche Cocoapod Version verwendest du? Plus, haben Sie darüber nachgedacht, UIStackView zu verwenden? Es scheint sehr geeignet für dieses Szenario – MCMatan

+0

@MCMatan CocoaPods Version ist 1.0.1. Ich habe unter Berücksichtigung UIStackView versuchen, aber es ist nur in iOS 9 und mein Projekt muss rückwärts kompatibel sein bis zu iOS 8 :( –

Antwort

1

aussehen sollte Wenn Sie Autolayout verwenden, und Sie wollen, dass die übergeordnete Ansicht nach I'ts Subklassen, um die Größe, es musste wissen, wie groß der Inhalt ist.

Die Draufsicht hat eine Einschränkung auf die Oberseite der übergeordneten Ansicht haben. Und die unterste Ansicht muss eine Einschränkung auf den unteren Rand der übergeordneten Ansicht haben.

Zur Zeit Ihre Ansichten sind enthalten akut nicht da Subklassen.

Wenn Sie versuchen, zum Beispiel, um die Hintergrundfarbe von "topView" auf rot, Sie werden feststellen, es ändert sich nicht die Farbe. Das ist, weil I'ts Größe 0 ist. I'ts wickelt I'ts Inhalt nicht ein. Wenn Sie "clipToBound" auf YES setzen, sehen Sie auch nicht seine Unterklassen.

es zu beheben, fügen Sie eine untere Einschränkung, von unten Blick auf die übergeordnete Ansicht:

[self.subtitleTextLabel mas_makeConstraints:^(MASConstraintMaker *make) { 
      make.centerX.equalTo(self.titleTextLabel); 
      make.width.equalTo(self.mas_width).multipliedBy(0.7); 
      make.top.equalTo(self.titleTextLabel.mas_bottom).with.offset(10.f); 
      make.bottom.equalTo(self.mas_bottom); //This line is added 
     }]; 


[self.sendButton mas_makeConstraints:^(MASConstraintMaker *make) { 
      make.centerX.equalTo(self); 
      make.width.equalTo(self).multipliedBy(0.4); 
      make.height.equalTo(@40); 
      make.top.equalTo(self.phoneNumberTextView.mas_bottom).with.offset(30.f); 
      make.bottom.equalTo(self.mas_bottom); // This line is added 
     }]; 
+0

Dies scheint gut zu funktionieren. Ich muss verstehen, was diese Einschränkung zu der Ansicht tut? –

+1

Dies sagt die Ansicht, welche Größe es ist, bevor Sie Einschränkungen auf die Breite (make.width.equalTo (self.mas_width) .multipliedBy (0.7) zum Beispiel), und die obere (make.top.equalTo (self);) Aber Sie Ich hatte keine Einschränkung, die auf die Unterseite Bezug nahm. "So wusste es nicht, wie groß ich bin. – MCMatan

+0

Ah. Got it! Danke sir –