Ist es möglich, den linken und rechten Abstand für b
in @"|-[a(5)]-[b(8)]-[c(5)]-|"
mit visuellen Formatstrings gleichmäßig zu verteilen?Verteilen Sie den Abstand gleichmäßig unter Verwendung der visuellen Formatzeichenfolge "Auto Layout"
Antwort
Nr
jedoch können Sie es mit visuellem Format und einer manuellen Constraint Erstellung tun. Ändern Sie Ihre VFL Zeichenfolge:
@"|-[a(5)]->=0-[b(8)]->=0-[c(5)]-|"
Dies sagt, dass Sie nicht allzu besorgt sind über die tatsächliche Größe der Räume zwischen a und b, und b und c.
Jetzt erstellen Sie eine Constraint pinning das Zentrum von b in der Mitte der Superview mit constraintWithItem:...
(Ich tippe dies auf einem Telefon, also verzeihen Sie mir nicht die ganze Methode Schreibweise).
Dies, zusammen mit Ihren flexiblen Abstand, wird gleichmäßige Räume links und rechts von b geben.
Das klingt groß. Ich werde es versuchen. Vielen Dank! – flohei
Funktioniert einfach großartig. So einfach. Vielen Dank! :-) – flohei
Wie genau hast du "das Zentrum von b ins Zentrum des Superviews gesteckt", @flohei? Und ist es nicht möglich, das visuelle Format auch dafür zu verwenden oder muss man 'constraintWithItem: attribut: relatedBy: toItem: attribute: multiplier: constant:'? –
Apples Auto Layout Guide schlägt vor, "spacer views" zu verwenden. Hier ist die Lösung für das Layout Ihrer drei Ansichten mit gleichem Abstand horizontal:
// create views dictionary
NSMutableDictionary *viewsDictionary = [NSMutableDictionary dictionary];
[viewsDictionary addEntriesFromDictionary:NSDictionaryOfVariableBindings(viewA, viewB, viewC)];
// create 4 spacer views
for (int i = 0; i < 4; i++) {
UIView *spacerView = [[UIView alloc] init];
spacerView.hidden = YES;
[self addSubview:spacerView];
[viewsDictionary setObject:spacerView
forKey:[NSString stringWithFormat:@"spacer%d", i + 1]];
}
// disable translatesAutoresizingMaskIntoConstraints in views for auto layout
[viewsDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop)
{
[obj setTranslatesAutoresizingMaskIntoConstraints:NO];
}];
// add constraints
[superview addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:
@"|[spacer1(>=0)][viewA][spacer2(==spacer1)][viewB][spacer3(==spacer1)][viewC][spacer4(==spacer1)]|"
options:kNilOptions
metrics:nil
views:viewsDictionary]];
Beachten Sie, dass spacer1
‚s Breite eingestellt ist mehr als 0 Nachfolgende Spacer Ansichten sein werden auf gleiche Breiten haben mit spacer1
.
Gibt es einen Grund, warum Sie nicht einfach 'NSDictionary * views = NSDictionaryOfVariableBindings (viewA, viewB, viewC) geschrieben haben?' '? –
Ich habe meine Antwort bearbeitet, um mehrere Argumente in NSDictionaryOfVariableBindings zu verwenden. Ich benutze ein veränderbares Wörterbuch, damit ich dynamisch meine Spacer-Ansichten hinzufügen kann. –
Oh, richtig.^___^'NSMutableDictionary * Ansichten = NSDictionaryOfVariableBindings (viewA, viewB, viewC) .mutableCopy;' then. –
SEHR GUT SO Artikel zu dieser Frage [hier] (http://stackoverflow.com/questions/13075415/evenly-space-multiple-views-within-a-container-view/25898949#25898949) –