Ich möchte meine UIImageView und UILabel wie das Bild unten zentrieren. Ich benutzte einen Container, um UIImageView und UILabel zu enthalten, aber der Container passt nicht zu der Breite von UIImageView und UILabel.So muss ich die Breite des Containers festlegen. Gibt es eine Methode, um das Problem zu lösen, ohne die Breite festzulegen oder zu berechnen Ansichtsbreite? Hier ist das Bild:iOS, wie zwei Ansichten über PureLayout zu zentrieren
5
A
Antwort
7
Es gibt vier Ansicht in Aktion:
- Outer oder Hauptansicht
- Container Ansicht (enthält Bild und Label)
- Bildansicht
- Etikett Ansicht
Die Ansichten sind in der Hierarchie folgenden:
- Außenansicht
- Container Ansicht
- Bildansicht
- Label-Ansicht
- Container Ansicht
Ich gehe davon aus, dass die äußere View bekommt seine Breite an d Höhe von anderen Einschränkungen.
Was ich aus dem Bild sehen Sie das Bild zur Verfügung gestellt ist größer als Etikett, dass folgende Constraints im Auge behalten konnte erreichen, was Sie wollen:
- Align X-Achse des Behälters im Hinblick auf äußere Ansicht
- Align Y-Achse des Behälters im Hinblick auf äußere Ansicht
- Pin oben, links und unteren Rand des Bildansicht zu Behälteransicht
- Pin rechten Rand des Etiketts am Behälter Ansicht
- Align Y-Achse des labe l zur Containeransicht.
- Legen Sie den horizontalen Abstand zwischen Bild- und Etikettenansicht fest.
2
[self.button autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:15];
[self.button autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:15];
[self.button autoSetDimension:ALDimensionHeight toSize:46];
[self.button autoAlignAxis:ALAxisVertical toSameAxisOfView:self.contentView];
[self.containerView autoAlignAxisToSuperviewAxis:ALAxisHorizontal];
[self.containerView autoAlignAxisToSuperviewAxis:ALAxisVertical];
[self.iconImageView autoPinEdge:ALEdgeLeft toEdge:ALEdgeLeft ofView:self.containerView];
[self.iconImageView autoAlignAxisToSuperviewAxis:ALAxisHorizontal];
[self.label autoPinEdge:ALEdgeRight toEdge:ALEdgeRight ofView:self.containerView];
[self.label autoAlignAxisToSuperviewAxis:ALAxisHorizontal];
[self.label autoPinEdge:ALEdgeLeft toEdge:ALEdgeRight ofView:self.iconImageView withOffset:10];
Dank @abdullah. Er machte meine Gedanken klar. Ich habe vergessen, "die rechte Kante des Etiketts an die Containeransicht zu hängen", so dass die containerView
width
zu 0 wurde.
Sie haben meinen Tag gerettet! – Thorax
Kommentare wie diese machen es sinnvoll, auf stackoverflow zu antworten. Mach weiter. – Abdullah
es funktioniert! In meinem Fall habe ich eine Width-Constraint in die äußere Ansicht gesetzt, und zwar in Bezug auf das übergeordnete Element. Ich tat dies, weil der Label-Text dynamisch ist und –