同じ幅になるように自動サイズ変更するスーパービューに 3 つのボタンを追加しようとしています。私は次のように次々と制約を追加することでそれを行いました:
for (UIButton* btn in _buttonsArray) {
btn.translatesAutoresizingMaskIntoConstraints = NO;
[self.buttonsView addSubview:btn];
[self.buttonsView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[btn(40)]"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(_buttonsView, btn)]];
UIButton *prevBtn;
int prevIndex = [_buttonsArray indexOfObject:btn]-1;
int nextIndex = [_buttonsArray indexOfObject:btn]+1;
if ( prevIndex >= 0) {
//there is a prev button
prevBtn = _buttonsArray[prevIndex];
} else {
//first button
NSDictionary* views = NSDictionaryOfVariableBindings(_buttonsView, btn);
[self.buttonsView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(15)-[btn]"
options:0
metrics:nil
views:views]];
}
if (prevBtn) {
NSDictionary* views = NSDictionaryOfVariableBindings(prevBtn, btn);
[self.buttonsView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[prevBtn]-(5)-[btn]"
options:0
metrics:nil
views:views]];
}
if (nextIndex >= [_buttonsArray count]){
//lastBtn
NSDictionary* views = NSDictionaryOfVariableBindings(btn, _buttonsView);
[self.buttonsView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[btn]-(15)-|"
options:0
metrics:nil
views:views]];
}
}
buttonsView の制約を印刷すると、次のようになります。
"<NSLayoutConstraint:0x845b760 V:[UIView:0x845b700(51)]>",
"<NSLayoutConstraint:0x8465310 V:|-(0)-[UIButton:0x845b7b0] (Names: '|':UIView:0x845b700 )>",
"<NSLayoutConstraint:0x8465110 V:[UIButton:0x845b7b0(40)]>",
"<NSLayoutConstraint:0x84655a0 H:|-(15)-[UIButton:0x845b7b0] (Names: '|':UIView:0x845b700 )>",
"<NSLayoutConstraint:0x84656f0 V:|-(0)-[UIButton:0x8464e00] (Names: '|':UIView:0x845b700 )>",
"<NSLayoutConstraint:0x8465750 V:[UIButton:0x8464e00(40)]>",
"<NSLayoutConstraint:0x84658a0 H:[UIButton:0x845b7b0]-(5)-[UIButton:0x8464e00]>",
"<NSLayoutConstraint:0x84659b0 V:|-(0)-[UIButton:0x8464ec0] (Names: '|':UIView:0x845b700 )>",
"<NSLayoutConstraint:0x8465a10 V:[UIButton:0x8464ec0(40)]>",
"<NSLayoutConstraint:0x8465b80 H:[UIButton:0x8464e00]-(5)-[UIButton:0x8464ec0]>",
"<NSLayoutConstraint:0x8465c90 H:[UIButton:0x8464ec0]-(15)-| (Names: '|':UIView:0x845b700 )>"
理論的には問題ないように見えますが、最後のボタンしか表示されず、必要以上に幅が広くなっています。何が間違っている可能性がありますか?どうもありがとう!