Erstens, stellen Sie sicher, dass Ihre gleicher Breite Einschränkungen sind wie folgt aufgebaut:
A.width == B.width
A.width == C.width
Und nicht wie folgt aus:
A.width == B.width
C.width == B.width
Das heißt, stellen Sie sicher, Ansicht B nur beteiligt ist in eine Gleichbreite Einschränkung.
Als nächstes stellen Auslässen B sehen und mit der gleichen Breitenbeschränkung auf Sicht B.
@property (nonatomic, strong) IBOutlet UIView *viewB;
@property (nonatomic, strong) IBOutlet NSLayoutConstraint *bEqualWidthConstraint;
die Einschränkung Steckdose anzuschließen, müssen Sie die Einschränkung in dem Storyboard-Umrisse finden. Es wird eine der Beschränkungen für den nächsten gemeinsamen Vorfahren von A und B sein; es wird nicht direkt auf A oder B sein. Wenn Sie es in der Storyboard-Gliederung finden, können Sie es per Drag-and-Drop in den Quellcode ziehen (oder Sie können eine neue Outlet-Funktion erstellen, indem Sie das Steuerelement an eine beliebige Stelle in Ihrem @interface
ziehen).
eine andere Eigenschaft weiteren hinzufügen Einschränkung Einstellung B Breite auf Null zu halten:
@property (nonatomic, strong) NSLayoutConstraint *bZeroWidthConstraint;
initialisieren bZeroWidthConstraint
aber nicht installieren:
- (void)viewDidLoad {
[super viewDidLoad];
self.bZeroWidthConstraint = [NSLayoutConstraint
constraintWithItem:self.viewB attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil attribute:NSLayoutAttributeNotAnAttribute
multiplier:0 constant:0];
}
Wenn Sie Ansicht B ausblenden möchten, deinstallieren Sie bEqualWidthConstraint
und installieren Sie bZeroWidthConstraint
.
Auf iOS 8.0 können Sie eine Integritätsbedingung deinstallieren, indem Sie die active
-Eigenschaft auf NO
setzen. In früheren Versionen müssen Sie jedoch eine Nachricht an die Ansicht senden, in der die Integritätsbedingung installiert ist. Das ist normalerweise der nächste gemeinsame Vorfahre der eingeschränkten Ansichten. Unter der Annahme der gemeinsamen Vorfahren von A und B viewB.superview
ist:
- (void)hideB {
[self.viewB.superview removeConstraint:self.bEqualWidthConstraint];
[self.viewB addConstraint:self.bZeroWidthConstraint];
}
Beachten Sie, dass seit bZeroWidthConstraint
nur Ansicht B beschränkt, können Sie es direkt auf Sicht B. installieren können
Wenn Sie Ansicht B zeigen wollen wieder deinstallieren bZeroWidthConstraint
und neu installieren bEqualWidthConstraint
:
- (void)showB {
[self.viewB removeConstraint:self.bZeroWidthConstraint];
[self.viewB.superview addConstraint:self.bEqualWidthConstraint];
}
Ist Ansicht B der einzige, der keine Daten aufweisen kann, oder es zu einem der drei Ansichten passieren kann? Ist es auch möglich, dass 2 Ansichten keine Daten haben? – pteofil
Was ist dein Ziel iOS? Ist es iOS 8.0 oder eine frühere Version? –
@robmayoff iOS 7 & iOS 8, aber Sie können mir auch antworten, wenn dies nur für iOS 8 möglich ist. – user2526811