ちょっと厨二っぽいSEのブログ

プログラミングとかのシステム備忘録など

【Swift2.0】 画面幅いっぱいに(均等に)ボタンを配置する方法 その2【カスタムView】

さて前回の続きです
ryokwkm2.hatenadiary.jp

このシリーズの目次

:カスタムViewを使う
1.カスタムViewのxibとクラスを用意する
2.xibとクラスを紐付ける
3.storyBoardとカスタムView紐付けて、動作確認

:画面幅いっぱいにボタンを配置する
4.xibで、実際のレイアウトを作成
5.コードを書く(画面に応じて大きさを変更させる)

:ボタンを押した時の処理を呼び出し元クラスで上書きする
6.プロトコルでデリゲートを定義


今回はAutoLayoutを用いて実際のレイアウトをしていきます

4.xibで、実際のレイアウトを作成

さて、ボタンを画面幅いっぱいにするということは
HTMLでいうところの width=100% にするということです

さらに、各ボタンの大きさもそれぞれ width=16.6% (6分の1) を指定したいのです

この指定方法がちょっと複雑なのです

なので、このSTEP4を、さらに3つのステップにわけて説明していきます


目次
STEP4.1 Viewに width=100% を設定
STEP4.2 Viewに width=50% を設定
STEP4.3 Viewに width=16.6% を指定し、ボタンを6個並べる

適当にViewを3つ置いてください(わかりやすいように色をつけてます)
f:id:ryokwkm:20151215184649p:plain

名前はそれぞれ
dummy
dummyLeft
dummyRight
とし、元から置いてあったViewの名前を
parentView
に変更しました


これらにそれぞれ以下の設定をします
parentView width:100%
dummy width:100%
dummyLeft width:50% (左から)
dummyRight width:50% (右から)

それでは具体的な方法を説明していきます

STEP4.1 Viewに width=100% を設定

以下の2つを設定します

parentView width:100%, height:100%
dummy width:100%, height : 30px

100%表示は
Editorメニュー > Pin > で画面幅いっぱいに表示させるようにすればOKです
parentViewに対して以下のように設定します
f:id:ryokwkm:20151215184651p:plain

paretView には width=100% height=100% を指定しました
dummy もwidth=100% を指定しますが、高さは固定値にします。 ここでは適当に 30くらいにしておきます

f:id:ryokwkm:20151215184655p:plain

右、左、下辺は parentView に合わせてください
Update Frames をすると以下のようになります
f:id:ryokwkm:20151215184657p:plain


STEP4.2 Viewに width=50% を設定

さて 50% 表示のやり方です

こちらは先ほど設定した
width=100% のView(dummy) の 50% の大きさ
という指定を行います


まずはdummyLeft を parentView の左下に添わせます
widthは設定せず、 heightは適当に10くらいに設定してみましょう
f:id:ryokwkm:20151216145754p:plain


するとエラーが表示されます
widthが未定ですよというエラーです
f:id:ryokwkm:20151216145817p:plain

続いてwidthを設定します
widthは、まず dummy と同じ大きさにします


dummyとdummyLeft を両方選択して、 pin から EqualWidths を設定
f:id:ryokwkm:20151216150144p:plain


するとdummyと同じく width:100% が設定されます
エラーも消えました
f:id:ryokwkm:20151216150248p:plain


さて、50%の秘訣はこの EqualWidthsです
今は dummyと同じ比率(Equal)になっていますが、この比率を 50% に変更します

設定した constaints から、今設定したEqualWidthsの設定に変更を加えます

f:id:ryokwkm:20151216150435p:plain

ユーティリティエリアのFirst Item を見ると、 dummy.width になっています
設定するのは dummyLeft.width に対してですので、これを入れ替えましょう

f:id:ryokwkm:20151216150737p:plain

その後、 Multiplier を変更します
現在 1 (100%) になっていますが、 これを0.5 に変更します

f:id:ryokwkm:20151216150841p:plain

すると 50% で表示させることができました


STEP4.3 Viewに width=16.6% を指定し、ボタンを6個並べる

さて、 4.1, 4.2 を理解したあなたは、以下の設定ができるはずです。
やってみましょう

parentView width:100%, height:100%
dummy width:100%
dummyLeft width:50% (左から)
dummyRight width:50% (右から)


できたらUIButtonを6個並べて、Titleを空にし、画像を指定しましょう
画像に関しては ImageとBackGroundがありますが、
どちらに指定しても完成後の見た目は同じです。

AutoLayout上ではBackgroundにした場合、以下のように伸びて表示されます

f:id:ryokwkm:20151216153300p:plain


その後以下のPinを指定すれば見た目は完成です
◆width
各UIButtonの大きさは dummy の 1/6 (0.1666)になるように EqualWidthsを設定

◆Height
上と下に関しては、どちらも parentView の上下に添わせて設定してください (height:100%)

◆位置
中央の2つは dummyLeft, dummyRight に沿わせるようにPinを設定

端の2つは、 parentViewの端に沿わせるように設定

端から2番めの2つは、端のボタン、もしくは中央のボタンのどちらかに沿わせるように設定します



この時、どのViewに添わせているかを確認しながら設定してください。

というのも、parentViewに添わせているつもりが別のViewに添わせていた ということがよくあります。


お疲れ様でした。

ただこれだと正常に動きません。
画面ごとにViewの大きさを変えるコードを少し書く必要があります

それはまた次回書きます