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 button2
fromと言うことができますbutton1
。例の値: 150button1
して追加します。constraint
Horizontally in Container
constrains
必要に応じて他のようなものを追加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;