Cocoa Auto Layoutに問題があり、この問題を回避できません。私が達成したいのは、以下に示すように、2つのボタンを常にビューの中央に配置することです。
私は成功せずに多くの異なるアプローチを試しました:(ここで私を助けてください。
これを行うもう1つのトリックは、button
の右側をsuperview
の中心から離れたスペースの半分のサイズに、button2
の左側を中心から離れたスペースの半分のサイズに揃えることです。 superview
の。
ただし、これは、中央に配置する2つのビューのみを囲むスーパービューがある場合にのみ実際に機能します。
私はこれをメモリから書いているので、うまくいけばすべての情報が正しいです。 XCode5を使用しています。これが、制約なしから始めてこれを行うことになった方法です。
両方のボタンを選択し、高さと幅を設定するために制約を追加します IBキャンバスの右下にある2番目のボタンからアクセスできる[新しい制約の追加]ウィンドウで。
両方のボタンを選択したままY位置を設定するための制約を追加。 [新しい制約の追加]ウィンドウの上のスペースまたは下のスペースのいずれかで問題ありません。
次に、ボタン1を選択し、IBキャンバスの右下にある最初のボタンからアクセスできる[新しい配置制約の追加]ウィンドウで配置制約 "コンテナ内の水平中心"を追加を選択します。デフォルトでは、追加された制約の「定数」値は0です。間違っているため、これを変更します。
この時点で、ボタン1には黄色のバーが垂直に走っています。これは、ボタンの水平方向の中心がコンテナの水平方向の中心+制約の定数(0)と等しくないことを示す警告です。垂直バーの数値は、ボタンが中心からどれだけ離れているかを示します。その番号を覚えておいてください。
ボタン1の黄色の縦棒をダブルクリックするか(器用さが必要)、ボタン1を選択して左側のペインに移動し、ルーラーをクリックして、「中心Xを次の位置に揃える」という制約を「選択して編集」します。
「定数」というラベルの付いたテキストボックスにステップ4の数値を入力します。ボタン1は、表示に必要なすべての制約を満たしています。幅、高さ、Y(上部スペースまたは下部スペースの制約)があり、X(水平方向の中央揃え)になりました。ただし、ボタン2には、ボタン1からピギーバックできるX位置がまだありません。
ボタン2を選択、[新しい制約の追加]ウィンドウに移動し、単純に先頭のスペースをボタン1に設定(上部の白いボックスの左側のバー)。
これで、2つのボタンが作成され、常にコンテナの中央に一定の幅で配置されます。
自動レイアウトの巧妙なトリックは、非表示のビューをスペーサーとして使用することです。制約システムは、通常どおりにそれらをレイアウトします。この場合、2つのボタン間のスペースが非表示になる可能性があります。この制約文字列から制約を使用できます。
@"[button][invisibleView(5)][button2(==button)]"
次に、制約設定を作成しますinvisibleView.centerX = superview.centerX
。
固定幅のボタンがあり、2つの間の固定距離が必要な場合は、次の手順で作業できます。
Width
とHeight
constraint
をbutton1
に追加します。値の例:高さ100、幅100。constraint
Equal Widths
とEqual Heights
を追加します。Horizontal Spacing
とbutton1
の間にbutton2
を追加します。または、Leading Space
からbutton2
にbutton1
を追加すると言うこともできます。値の例:150button1
を選択し、constraint
Horizontally in Container
を-125の値で追加します。Vertical Spacing to Container
などの他のconstrains
を追加します。値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;
それがあなたを助けることを願っています。
基本的に、UIButtons
の内側に2つのUITableViewCell
があり、常に中央に配置され、同じ幅である必要があります。これが私がXcode7.2でそれを機能させた方法です。ちなみに、私はSwiftを使用していますが、それが何らかの形で関連している場合は。