iOSのメニューの水平方向の中央にプログラムでボタンを追加しようとしています。そのため、各ボタンは前のボタンの下に表示されます。
私のメニューはと呼ばれるUIViewでviewToPlaceButtonsOn
あり、最後に配置されpreviousButton
たボタンを格納するための変数があります。
かなり単純なようですよね?誰かが私がこれをそんなに間違っている理由を理解するのを手伝ってくれる?
- (void)makeButton:(NSString*) buttonTitle {
UIButton* menuButton = [[UIButton alloc] init];
[menuButton setTitle: buttonTitle forState:UIControlStateNormal];
[menuButton setBackgroundColor:[UIColor redColor]];
[viewToPlaceButtonsOn addSubview:menuButton];
[viewToPlaceButtonsOn addConstraint:[NSLayoutConstraint constraintWithItem:menuButton
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:previousButton
attribute:NSLayoutAttributeCenterX
multiplier:1.0f
constant:0.0f]];
[viewToPlaceButtonsOn addConstraint:[NSLayoutConstraint constraintWithItem:menuButton
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:previousButton
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:50.0f]];
[viewToPlaceButtonsOn addConstraint:[NSLayoutConstraint constraintWithItem:menuButton
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0F
constant:200]];
[viewToPlaceButtonsOn addConstraint:[NSLayoutConstraint constraintWithItem:menuButton
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0F
constant:40]];
NSLog(@"Button's Frame: %f x %f (%f x %f)", [menuButton frame].origin.x, [menuButton frame].origin.y, [menuButton frame].size.width, [menuButton frame].size.height);
previousButton = menuButton;
}
すぐにいくつかのことが浮かび上がります。設定する必要があります
menuButton.translatesAutoresizingMaskIntoConstraints = NO;
制約を正しくするために、そうでない場合は自動レイアウトが独自の制約を追加します。
また、その時点でレイアウトが実行されていないため、NSLogは正確ではありません。layoutSubviewsが呼び出されると、ビューフレームは自動レイアウトによって設定されます。これを確認するには、デバッガーを使用して、メソッド呼び出しの最後にボタンを出力します。
po menuButton
次に、続行してからプログラムを一時停止し、前の位置から取得したボタンのメモリアドレスをコピーして貼り付けると、フレームが設定されていることがわかります。
po 0x039484
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加