iOS Autolayout:同じ幅の2つのボタンを並べて


92

現在、オートレイアウトに問題があります。次の図に示すように、インターフェイスビルダーを使用して、同じ幅の2つのボタンを並べて配置しようとしています。

客観的なレイアウト

次のプレビュー画像から、titleImageは適切に制約され、正しく表示されていますが、ボタンはそうではありません。私は、button1をtitleImageのリーディングエッジに揃え、button2をtitleImageのトレーリングエッジに揃えて実験しましたが、2つのボタン間の幅の分布は、この時点で歪んでいます。

問題シナリオ

私の目的は、不足している制約を理解することであり、デバイスに関係なく同じ幅を維持するために2つのボタンに適用する必要があります。可能であれば、追加のコードではなく、インターフェイスビルダーを通じてこれを実現したいと思います。


1
石積みは、プログラムでこれを行うための推奨される方法です。リンク:github.com/Masonry/Masonry
Itachi

1
ここにリンクがある...あなたは確認することができます... stackoverflow.com/questions/29620409/...
EIキャプテンv2.0の

回答:


246

次の制約を追加します

  1. button1からbutton2に等しい幅を割り当てます。
  2. 両方のボタンの間に水平方向の間隔を割り当てます。
  3. button1からそのスーパービューに先行スペースを割り当てます。
  4. button2からそのスーパービューに末尾のスペースを割り当てます。
  5. 両方のボタンに上部のスペースを割り当てます。
    それがあなたのために働くかどうか私に知らせてください。

7
すばらしい-これは私のために働いた。具体的には、ポイント#2-水平方向の間隔を追加します。
Scratcha、2015年

うわぁ!!!どういう意味?それは本当に魅力のように機能し、私は約3時間無駄になりました!:(私の場合、スーパービューでそれを分割する同じ幅の2つのビューがありました。しかし、最後に「Yまたは高さの制約が必要です」のようなメッセージが表示されました。「不足している制約の追加」を選択して解決しました。
Randika Vishman、2015

@Abubakr:両方のボタンの幅が同じになるため、1つの画面サイズでのみ機能します。
AG

1
2つ以上の隣接するUI要素でも機能します。
siege_Perilous 2016年

1
感謝しますが、解決策とコードの方が優れていることがわかりました。それらのいずれかを中央揃えで親に配置し、コンテンツサイズの半分を一定にして、コードで計算できるようにします。または、コンテンツが静的な場合は、フレームを更新して定数を更新できます。それに合わせて、2つのボタン間の中央の間隔の半分を中央揃えに追加します。そして、その先頭または末尾を他のボタンに与えるだけです。これを修正します。また、コンテンツが固有で更新が必要な場合は、レイアウト更新メソッドを呼び出して定数値を再計算するだけです。
アンバーK

79

手順とスクリーンショットに従って簡単に解決


ステップ1)

  • ボタン1の場合:制約を設定します: (1)リーディング、(2)必要に応じて上部または下部、(3)高さ


ステップ2)

  • ボタン2の場合:制約を設定します: (1)後退、(2)必要に応じて上部または下部、(3)高さ

ステップ-3)

  • Ctrlキーを押しながらボタン1からボタン2にドラッグ

  • 水平間隔を選択


ステップ-4)

  • 両方のボタンを選択し(コマンドを使用)、幅に等しい制約を追加


出力

それがあなたを助けることを願っています:)


1
高さを固定しないでください。ビューが画面サイズに応じてボタンの高さを決定するようにします。
Kunal Kumar

@KunalKumarこの場合、高さは固定です。何を言ってくれますか?
Vvk 2016

@Vvk ...完璧な仲間:)
Jaywant Khedkar

18

iOS9のスタックレイアウトは、本当に素晴らしい仕事をします。スタックビューをビューに追加し、次のように構成します。

ここに画像の説明を入力してください



0

私の解決策は

  1. 2つのボタンの真ん中に小さなビューを置き、それを中央にします(コンテナーの水平方向の中心とコンテナーの垂直方向の中心を0とします)。
  2. 小さなビューに高さと幅を追加します。
  3. ボタンに制約を追加し、小さなビューに水平方向のスペース制約を与えます。
  4. 小さいビューの背景色をボタンまたはビューの色と同じにします。

注:スクリーンショットをご覧ください。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.