Raptor開発者ブログ

期限:2016年月日 やること:次のアプリをリリースする 資格の勉強法、アプリ開発、はてブロのカスタマイズのことを書きます!

storyboadでカードUIっぽい背景にする方法

 
 
以前、storyboardを使ってそこそこ複雑なレイアウトを実現しました。
 raptor36.hateblo.jp


今回は、そのレイアウトをベースに、カードUIっぽい見た目にしたいと思います。
 
こういった感じにします。

f:id:raptor36:20151124104631p:plain:w200
 
もちろん、ライブラリとかでいいのがあれば、それを用いるのが一番簡単なのですが、ちょうどいいのが見つからなかったので、storyboardでレイアウトすることにしました。
 
また、storyboardの中をざっとみると、Containerをうまく使えば簡単にカードUIを実現できそうです。
ただ、Containerの使い方がいまいちよくわからなかったので、今の自分のレベルで思いつくやり方でやってみました。

カードUIぽくするときのポイント

 
今回重要なのは2点です。
1点目はviewを用意していく順番で、2点目はスクロールがうまくいくためのルールです。
 
 
前回はこのようにできました。
これをベースに変更していきます。
f:id:raptor36:20151121171530p:plain
 
 
最終的には、こういうレイアウトを目指します。
f:id:raptor36:20151124104625p:plain
 
これを実機で表示すると最初の画像のようになります。
f:id:raptor36:20151124104631p:plain:w200
 
 
これを実現するために、viewをつけていきます。
おおまかな順番としては、左、真ん中下、右にviewを設置し、あとは、真ん中の部分にviewをいくつか追加していきます。


左用のviewを貼ります。
f:id:raptor36:20151121171531p:plain


左に配置します。この辺のやり方は、前回の記事に書いてあります。
f:id:raptor36:20151121171532p:plain

真ん中下に配置します。
f:id:raptor36:20151121171539p:plain


右用のviewをはりつけます。
ここは、何も考えずにやるとうまくいかない場合ああるので、少し詳しく説明します。
f:id:raptor36:20151121171540p:plain

右用のviewの高さと幅は、左用のピンクのviewとイコールにしています。
そして、上はscrollviewに接地した制約をします。
f:id:raptor36:20151121171542p:plain

今度は左右の制約についてですが、右には何も制約をつけません。
左についてだけ、左に接地している黒い線のviewに接地した制約をします。
右に接地した制約をやるとレイアウトがなぜか崩れるからです。
f:id:raptor36:20151121171541p:plain
 
さらに、真ん中の黒viewの下に、緑viewを設置します。
f:id:raptor36:20151121171545p:plain
 
 
今度は、左右のピンクviewのbottomをscrollviewに接地した制約をします。
ここで、ものすごく大事なこととして、左右のピンクviewの高さについては、scrollviewと同じにするなどの制約を一切つけません。
左右のピンクviewの高さに何か制約をつけてしまうと、スクロールしなくなってしまいます。
これに気づかずに2時間くらいスクロールがうまくいきませんでした。
f:id:raptor36:20151121171546p:plain



ここからまた少し大事なので、少し詳しく説明します。

kaitourireki直下に黒と緑のviewを設置しましたが、同じような感じで、今度はkaisetsu下に黒viewと緑viewを設置します。
そのために、まずは黒viewをはりつけます。
サイズはkaitourireki直下の黒viewと同じ要領です。
f:id:raptor36:20151121171548p:plain

さらにkaisetsu直下の黒viewの下に緑viewをつけたいです。
そこで、緑viewを適当に貼り付けます。
f:id:raptor36:20151121171549p:plain
 
 
緑viewを、kaisetsu直下の黒viewの下に接地するためには、kaisetsu直下の黒viewと緑viewの間に何もないようにします。
こうしないと接地できません。
他のviewに重なっても大丈夫です。
そうしたら、緑viewをkaisetsu下の黒viewに接地する制約をします。
f:id:raptor36:20151121171550p:plain

こうして緑viewを黒viewの下に接地できましたが、このままだと緑viewがkaitourirekiにカブってしまっています。
f:id:raptor36:20151121171552p:plain
 
そこで、kaitourirekiを選んだ状態で、右側のカラムの中を修正してkaitourirekiとkaisetsuとの距離を50から200に広げます。
f:id:raptor36:20151121171553p:plain
 
広がりました。
f:id:raptor36:20151121171554p:plain


広がったら、kaitourirekiとkaisetsuの制約を消去して、新しく、kaisetsu下の緑viewに、kaitourirekiを接地する制約をします。
f:id:raptor36:20151121171558p:plain
 
 
この要領で、toi直下にも黒bviewと緑viewをつけていきます。
f:id:raptor36:20151121171609p:plain


ここまでできたら、toiの上に青viewを設置します。
やり方はだいたい今までと同じ感じです。
f:id:raptor36:20151121171616p:plain
 
 
さらに、label2つを問題のしたにつけたらレイアウトは出来上がりです。
左右の高さを少し修正しましたが、本篇には直接関係ありません。
f:id:raptor36:20151121171625p:plain
 
 
ここまできたら、あとは色を整えると、最初に提示した完成型になります。
f:id:raptor36:20151124104625p:plain

 
 
 
今回どうしてわざわざまとめたのかというと、カードUIを作りたい場合のviewを用意していく順番と、スクロールがうまくいくためのルールを書きたかったからです。
 
viewを用意する場合、左、真ん中、右に設置します。右、真ん中、左でも大丈夫です。
とにかく大事なのは、最初にviewを設置したら、そのviewに接地させた状態でレイアウトを追加していくことです。
そして、今回の真ん中のレイアウトのように、縦にたくさんレイアウトする場合は、下の方から設置していきます。
そうしないと、たくさんレイアウトしていった結果、下の方が見えなくなる可能性があるからです(今回は薄っぺらくしたので、全て画面上の見える範囲でできましたが。)

スクロールをうまくやるには、上下の接地に関して余計な制約をつけないことです。前回はそれについて書きました。
今回は、新たに、高さの制約をしてはいけないということです。
もちろん、高さを1000とかに制約すればスクロールできます。
しかし、もっと柔軟にしたい場合に、高さをscrollviewとイコールにしてしまうと、スクロールできません。
今回私は、左右のピンクviewの高さ(hight)をscrollviewとイコールにしてしまっていたために、スクロールできませんでした。
その高さの制約を外したとたんに、うまくスクロールできるようになりました。
この場合におそろしいのは、何が原因なのかヒントが全くないので、気づくのが困難ということです。
なので、scrollviewを使うときはお気をつけください。
 
 
 

QLOOKアクセス解析