2

同じ幅になるように自動サイズ変更するスーパービューに 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 )>"

理論的には問題ないように見えますが、最後のボタンしか表示されず、必要以上に幅が広くなっています。何が間違っている可能性がありますか?どうもありがとう!

4

0 に答える 0