Probleme mit AutoLayout mit Benutzerdefinierte Ansichten definiert in der NIB-Datei und verwendet Sie im StoryBoard

Habe ich definiert eine benutzerdefinierte Ansicht in einer NIB-Datei und möchte instanziieren eine Kopie in einem StoryBoard, aber ich habe Probleme mit autolayout.

In einem einfachen Beispiel, die benutzerdefinierte Ansicht-Einzel-Etikett mit einer festen Größe und zentriert, sowohl vertikal als auch horizontal, die alle mit autolayout.

Probleme mit AutoLayout mit Benutzerdefinierte Ansichten definiert in der NIB-Datei und verwendet Sie im StoryBoard

Den Eigentümer der Datei festgelegt ist, zu meiner Klasse, es hat eine Steckdose, um die Ansicht von oben. In die custom-view-Implementierung, die ich tun:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if(self)
    {
        [[NSBundle mainBundle] loadNibNamed:@"FMCompassView" owner:self options:nil];
        [self addSubview:self.topView];
    }
    return self;
}

Nun, in meinem storyboard, füge ich ein UIView, gesetzt es ist Klasse zu meiner benutzerdefinierten Klasse und das layout es aus Größe und zentriert auf meine Seite, wieder mit autolayout.

Probleme mit AutoLayout mit Benutzerdefinierte Ansichten definiert in der NIB-Datei und verwendet Sie im StoryBoard

Und mein widget positioniert ist, und die Größe richtig, aber der Inhalt wird nicht verändert, wie unten dargestellt:
Probleme mit AutoLayout mit Benutzerdefinierte Ansichten definiert in der NIB-Datei und verwendet Sie im StoryBoard

Habe ich versucht, indem weitere Einschränkungen nach dem laden aus der Feder, etwas entlang der Linien von:

UIView* subV = self.topView;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(subV);
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[subV]|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:viewsDictionary]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[subV]|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:viewsDictionary]];

Aber dies bewirkt, dass ungültige layout-constraints.

Irgendwelche Ideen auf, wie diese zu arbeiten?

Prost!

denke, dass ich herausgefunden warum: die Ansicht erstellt aus dem laden der NIB-muss erzählt werden, nicht zu konvertieren, die automatische Größenänderung der Maske zu Zwängen, NOCH wenn der Inhalt der Feder ist eigentlich mit autolayout aktiviert. Also nach dem laden der NIB und vor dem hinzufügen der top-Ansicht der benutzerdefinierten anzeigen, muss ich anrufen: [self.topView setTranslatesAutoresizingMaskIntoConstraints:NO];
Sie können die richtige Antwort zu finden hier: stackoverflow.com/a/34524346/971329. Siehe mein Kommentar unten für die Rasche Umsetzung einer wiederverwendbaren superview, kümmert sich um alles.

InformationsquelleAutor mkrus | 2013-06-15

Schreibe einen Kommentar