Cocoa Auto Layout に問題があり、この問題を回避できません。私が達成したいのは、以下に示すように、ビューの中央に常に 2 つのボタンを配置することだけです。

私は成功せずにさまざまなアプローチをたくさん試しました:(ここで私を助けてください。
Cocoa Auto Layout に問題があり、この問題を回避できません。私が達成したいのは、以下に示すように、ビューの中央に常に 2 つのボタンを配置することだけです。

私は成功せずにさまざまなアプローチをたくさん試しました:(ここで私を助けてください。
Auto Layout の巧妙なトリックは、目に見えないビューをスペーサーとして使用することです。制約システムは、通常どおりそれらをレイアウトします。この場合、2 つのボタンの間のスペースは非表示のビューになる可能性があります。次の制約文字列の制約を使用できます。
@"[button][invisibleView(5)][button2(==button)]"
次に、拘束設定を作成しますinvisibleView.centerX = superview.centerX。
Another trick to do this is to align the right side of button to be half the size of the space away from the Center of superview, and the left side of button2 to be half the size of the space away from the Center of superview.
This only really works if you have a superview that only surrounds the two views you want to centre though.
固定幅のボタンがあり、2 つの間の固定距離が必要な場合は、次の手順で作業できます。
Width値の例にとHeight constraintを追加button1: 高さ 100、幅 100。constraint Equal WidthsしEqual Heightsます。Horizontal Spacingとの間button1に追加しbutton2ます。Leading Spaceまたは、 add to button2fromと言うことができますbutton1。例の値: 150button1して追加します。constraint Horizontally in Containerconstrains必要に応じて他のようなものを追加Vertical Spacing to Containerします。例の値 125 は ( button1 width/ 2) + ( Horizontal Spacing/2) に等しく、100/2 + 150/2 = 125 です。
したがってHorizontal in Container、-125 を追加するとbuttonsが左に移動し、このレイアウトが画面の中央になります。
以下の方法でも実現できます。
1.左ボタンの先頭スペース、右ボタンの末尾スペースを取ります。
2.先行制約と後続制約の両方のアウトレットを構築します。
__weak IBOutlet NSLayoutConstraint *leadingConstraint;
__weak IBOutlet NSLayoutConstraint *trailingConstraint;
3.以下の式で定数を計算します。
NSInteger constant = (SCREEN_WIDTH - (CGRectGetWidth(leftButton.frame) + CGRectGetWidth(rightButton.frame))) / 3;
leadingConstraint.constant = constant;
trailingConstraint.constant = constant;
それがあなたを助けることを願っています。
基本的に、私は常に中央に配置し、同じ幅にする必要がある下に2つ配置していますUIButtons。UITableViewCellこれは、Xcode 7.2 で動作させる方法です。ちなみに、それが何らかの形で関連している場合、私はSwiftを使用しています。
素晴らしいヒント。私の場合、ボタンをビューの中心から 10 ピクセル離れた位置に配置したかったので、計算が少し異なります
leadingConstraint.constant = (self.frame.size.width / 2.0) + 5.0;
trailingConstraint.constant = (self.frame.size.width / 2.0) + 5.0;