Jeśli powiążesz atrybut AttributeCenterX z atrybutami AttributeCenterX, AttributeLeading lub AttributeTrailing, powinieneś być w stanie wyrazić pożądane ograniczenie za pomocą mnożnika i ograniczenia. Należy pamiętać, że stała jest obliczana tylko wtedy, gdy tworzone jest ograniczenie, a stała tego przykładu nie byłaby aktualizowana w miarę zmiany szerokości ac.superview.
Jeśli możesz wyrazić słowami, w jaki sposób chcesz ustawić ac w stosunku do jego superview, możemy zasugerować ograniczenie.
Edit
Oto przykład z 5 NSButtons. Sami i przestrzeń między nimi rozszerzają się tak, że przestrzenie są o 30% tak szerokie jak przyciski, wszystkie przyciski mają tę samą szerokość, a wszystkie przestrzenie mają tę samą szerokość. Tworzenie 4 niewidocznych widoków NSView w celu utworzenia odstępów jest dość uciążliwe, szczególnie biorąc pod uwagę, że pracujesz poza programem autolayout. Ale w przypadku, gdy jesteś ciekawy:
// Assuming these NSViews and NSButtons exist,
//NSView* superview ;
//NSButton *buttonOne, *buttonTwo, *buttonThree, *buttonFour, *buttonFive ;
[superView removeConstraints:superView.constraints] ;
// Create empty NSViews to fill the space between the 5 buttons.
NSView* spaceOne = [NSView new] ;
NSView* spaceTwo = [NSView new] ;
NSView* spaceThree = [NSView new] ;
NSView* spaceFour = [NSView new] ;
spaceOne.translatesAutoresizingMaskIntoConstraints = NO ;
spaceTwo.translatesAutoresizingMaskIntoConstraints = NO ;
spaceThree.translatesAutoresizingMaskIntoConstraints = NO ;
spaceFour.translatesAutoresizingMaskIntoConstraints = NO ;
[superView addSubview:spaceOne] ;
[superView addSubview:spaceTwo] ;
[superView addSubview:spaceThree] ;
[superView addSubview:spaceFour] ;
NSDictionary* views = NSDictionaryOfVariableBindings(superView,buttonOne,buttonTwo,buttonThree,buttonFour,buttonFive,spaceOne,spaceTwo,spaceThree,spaceFour) ;
// Vertically align buttonOne to its superview however you like.
[superView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[buttonOne]" options:0 metrics:nil views:views ] ] ;
// Make the "space" NSViews' widths equal and >= 10. Make the buttons' widths equal.
[superView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[buttonOne][spaceOne(>=10)][buttonTwo(==buttonOne)][spaceTwo(==spaceOne)][buttonThree(==buttonOne)][spaceThree(==spaceOne)][buttonFour(==buttonOne)][spaceFour(==spaceOne)][buttonFive(==buttonOne)]|" options: NSLayoutFormatAlignAllCenterY metrics:nil views:views ] ] ;
// Make the "space" NSViews' widths 30% of the NSButtons' widths.
[superView addConstraint: [NSLayoutConstraint constraintWithItem: spaceOne
attribute: NSLayoutAttributeWidth
relatedBy: NSLayoutRelationEqual
toItem: buttonOne
attribute: NSLayoutAttributeWidth
multiplier: 0.3
constant: 0 ] ] ;
Naprawdę dobre pytanie. Wydaje się być tajemniczy. –