これは非常に単純な (そしておそらくばかげた) 質問ですが、これに対する最もクリーンで最適なアプローチを見つけることができないようです。ボタンは 3 つあり、ポートレート モードでは見栄えがします。次のように autoResizingMasks を追加することで、中央のものを常に中央に配置することもできます。
[self.centerButton setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin];
ただし、左右のボタンを処理する最善の方法がわかりません。以下のスケッチを参照してください。私が必要としているのは、中央と左端/右端の間の中央に配置するために、それらを少しだけシフトすることです。
IBまたは(できれば)コードを使用してこれをかなり簡単に実行できると確信しているため、おそらくばかげた質問で申し訳ありませんが、正しくて最もクリーンなアプローチについて考えてみたかっただけです。前もって感謝します!
編集
いくつかの追加情報、私はiPadで作業しています。下部のボタンは、実際には「buttonPanel」と呼ばれる下部のサブビューに含まれています。
回答の1つのアドバイスに従って、次のコードを追加しました。下記参照。ただし、「制約を同時に満たすことができません」というメッセージしか表示されません。このコードを追加するとエラーが発生し、制約をリストすると、以下のもののみがリストされるため、このビューには他の追加の制約はありません。以下のコードに何か問題がありますか?ここで明らかな何かが欠けているのではないかと心配しています..
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.buttonPanel removeConstraint:conLeft];
[self.buttonPanel removeConstraint:conRight];
float paddingPortrait = 20; // pd
float paddingLandscape = 50; // ld
float widthOfView = 768;
float heightOfView = 249;
float denominatorVal = heightOfView - widthOfView;
float leftMultiplier = (paddingLandscape - paddingPortrait) / denominatorVal;
float rightMultiplier = (denominatorVal + paddingPortrait - paddingLandscape) / denominatorVal;
float leftConstant = paddingPortrait - (widthOfView * leftMultiplier);
float rightConstant = -leftConstant;
conLeft = [NSLayoutConstraint constraintWithItem:self.leftButton attribute:NSLayoutAttributeLeading relatedBy:0 toItem:self.buttonPanel attribute:NSLayoutAttributeRight multiplier:leftMultiplier constant:leftConstant];
conRight = [NSLayoutConstraint constraintWithItem:self.rightButton attribute:NSLayoutAttributeTrailing relatedBy:0 toItem:self.buttonPanel attribute:NSLayoutAttributeRight multiplier:rightMultiplier constant:rightConstant];
[self.buttonPanel addConstraints:@[conRight,conLeft]];
}
そして、スローされるエラーは次のとおりです。
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
"(NSAutoresizingMaskLayoutConstraint:0x8b36ce0 h=&-& v=&-- H:[UIButton:0x8874200(166)])",
"(NSAutoresizingMaskLayoutConstraint:0x8b38720 h=&-& v=&-- H:[UIImageView:0x8877880(200)])",
"(NSAutoresizingMaskLayoutConstraint:0x8b38640 h=&-& v=&-- UIImageView:0x8877880.midX == 0.165365*UIView:0x8876c00.width)",
"(NSLayoutConstraint:0x8b3a780 UIImageView:0x8877880.leading == 0.127119*UIView:0x8876c00.right - 77.6271)",
"(NSLayoutConstraint:0x8b3a6a0 UIButton:0x8874200.trailing == 0.872881*UIView:0x8876c00.right + 77.6271)",
"(NSAutoresizingMaskLayoutConstraint:0x8b36ca0 h=&-& v=&-- UIButton:0x8874200.midX == 0.848958*UIView:0x8876c00.width)"
)
制約を破って回復を試みます (NSLayoutConstraint:0x8b3a6a0 UIButton:0x8874200.trailing == 0.872881*UIView:0x8876c00.right + 77.6271)