SlideShare a Scribd company logo
使うっきゃない!
iOS9で楽になった
Auto Layout!
2016年2月20日
佐藤剛士
自己紹介
【名前】
佐藤剛士
【お仕事】
前は受託IT企業でインフラの保守運用業務
今は有限会社カイカイでiOSアプリ作成
【できること】
ruby,iOS,apatch,linux(サーバー周り),Twilio
Webフロント
【リリースアプリ】
YumeHoshi
LillyBlocker -広告ブロックでサクサク快適Safariに!
iOS開発の朝活しています
beezプログラミング勉強会
https://www.facebook.com/groups/407821455988195/
毎週木曜日7:30∼9:00電源カフェbeez渋谷店
詳解Swift改定版読書勉強会
https://www.facebook.com/groups/1543718659272111/
毎週日曜日9:00∼11:00電源カフェbeez渋谷店
iOS9になり
Auto Layoutも
さらに強化されました
Auto Layoutの歴史
iOSのバージョンが上がるたびに使いやすくなる
iOS6 -> Auto Layout誕生
iOS7 -> Xcode5でPinとAlign機能追加
iOS8 -> Class Size誕生!
Auto Layoutの歴史
iOSのバージョンが上がるたびに使いやすくなる
iOS6 -> Auto Layout誕生
iOS7 -> Xcode5でPinとAlign機能追加
iOS8 -> Class Size誕生!
iOS9
-> StackView と NSLayoutAnchor
Auto Layoutってなんだっけ?
UIのレイアウトについて
制約を課すことでUIコンポーネントの位置とサイズを
自動的に決定する機能
↓
Auto Layoutを使って嬉しいこと
・iPhone(4s - 6sPlus)とiPadのレイアウト対応
・Dynamic Type対応
 ->文字の大きさをユーザーが決められる
・国際化対応
 ->英語とアラビア語で文字の方向逆
StackView
• iOS 9.0 導入された機能
• 縦方向または横方向にViewを並べられる機能
• StackViewのサブビューとしてビューを入れれば
StackViewの方で自動的にレイアウトしてくれる
• 各ビューに対してAutoLayoutをそれぞれ設定しなくて
もレイアウトをしてくれる!
Stack View
とっても楽!
StackViewの使い方
imageViewを等間隔に並べる
ライブラリーからStoryboadに配置
StackViewのAutoLayoutを設定
トップに10
左0
右0
今回はStackViewの高さを親ビューの70%の高さにする
imageViewを3つ置く
StackViewを選択して
Attribute inspectorで
distributionをFill Equallyに変更
imageViewが等間隔に並ぶ
StackViewの入れ子
UIコンポーネントを選
択した状態でStackView
ボタンをクリックする
と、選択したViewを内
包したStackViewを作
成できる
入れ子を組み合わせる
ことで、すこし複雑な
レイアウトもできる
左図は垂直StackView
の中に水平StackView
を入れ子にしたもの
垂直StackView
水平StackView
ちなみに。。。
iOS8までのviewを等間隔に並べる方法
等間隔に並べたいView(view1,view2)とそれよりも
1つ多いスペース調整のview(spacing1,2,3)を用意す
る
spacing1
view1 view2
spacing2 spacing3
今回は5つのviewをVertical Center in Containerで
垂直方向中心に置く。(y軸を決定)
spacing1
view1 view2
spacing2 spacing3
spacingViewの横幅を全て同じ制約をつける
spacing1
view1 view2
spacing2 spacing3
spacing1を選択して
ctl+spacing2へドラッ
グ→「Equal Withds」
spacing1を選択して
ctl+spacing3へドラッ
グ→「Equal Withds」
View1,View2のWHを決める
→今回はWidth:70、Height:200
spacing1
view1 view2
spacing2 spacing3
各viewの隣通しの間隔の制約をつけていく
spacing1
view1 view2
spacing2 spacing3
①
①spacing1と
superViewの間隔の制
約を追加
①の結果↓
各viewの隣通しの間隔の制約をつけていく
spacing1
view1 view2
spacing2 spacing3
②
②spacing1とview1の
間隔の制約を追加
②の結果↓
各viewの隣通しの間隔の制約をつけていく
spacing1
view1 view2
spacing2 spacing3
③
③view1とspacing2の
間隔の制約を追加
③の結果↓
各viewの隣通しの間隔の制約をつけていく
spacing1
view1 view2
spacing2 spacing3
④
④spacing2とview2の
間隔の制約を追加
④の結果↓
各viewの隣通しの間隔の制約をつけていく
spacing1
view1 view2
spacing2 spacing3
⑤
⑤view2とspacing3の
間隔の制約を追加
⑤の結果↓
各viewの隣通しの間隔の制約をつけていく
spacing1
view1 view2
spacing2 spacing3
⑥
⑥spacing3と
superViewの間隔の制
約を追加
⑥の結果↓
spacing1に親ビューとの下向きの制約を追加
spacing1
view1 view2
spacing2 spacing3
spacing1,spacing2,spacing3を選択
Top Edgesの制約を追加
→実践で使う場合はspacingの背景を透明にしてください
spacing1
view1 view2
spacing2 spacing3
この工程がiOS9からはいらなくなった!
Layout Anchors
Auto Layoutの原則
redViewyellowView
8
redView.Leading = 1.0 BlueView.trailing + 8.0
Item1 Attribute1 Item2 Attribute2
Constant
Relationship
Multiplier
一つ制約作るのに7つの要素必要
NSLayoutAnchorクラス追加!
redView.leadingAnchor.constraintEqualToAnchor(yellowV
iew.trailingAnchor,constant: 8).active = true
Item 1 redView
Attribute 1 leadingAnchor
Relationship constraintEqualToAnchor
Multiplier なし(デフォルト1.0)
Item 2 yellowView
Attribute 2 trailingAnchor
Constant 8
プロパティで制約を設定できる!
NSLayoutAnchorのいいところ
• 型の安全性、保証がよい
• 記述がしやすい
• コードが読みやすい
今までのAuto Layout作成コード
• NSLayoutConstraint クラス
• Auto Layoutに必要な7要素を引数で設定
• わかりやすいがコード量がおおい
• Visual Format Language
• Visual Format Languageという制約設定の記法を使
い設定
• 複数の制約をいっきに設定できる
• 文字列で設定するので不正な記法を書いた時に分かる
のは実行時のみ
• 中央 えとか、マージン設定の方法がわかりにくい
NSLayoutConstraint クラス
let redViewLeadingConstraint = NSLayoutConstraint(item: redView,
attribute: NSLayoutAttribute.Leading,
relatedBy: NSLayoutRelation.Equal,
toItem: yellowView,
attribute: NSLayoutAttribute.Trailing,
multiplier: 1.0,
constant: 8)
self.view.addConstraint(redViewLeadingConstraint)
Visual Format Language
let views = [
"redView" : redView,
"yellowView" : yellowView
]
let redViewHorizonConstrains =
NSLayoutConstraint.constraintsWithVisualFormat("
H:|-[yellowView]-8-[redView]-|",
options: NSLayoutFormatOptions(rawValue: 0),
metrics: nil,
views: views)
self.view.addConstraint(redViewHorizonConstrains
)
デモ
• 下のレイアウトを3つの書き方でみてみます!
redView yellowView
親ビュー
0 0
88 88
10 10
redView
は親ビューの
幅40%
の大きさ
redViewと
yellowView
は同じ
大きさ
サンプルコード
https://github.com/SatoTakeshiX/AutoLayoutinios9
参考URL
iOS 9で追加されたNSLayoutAnchor使うと簡潔にわかりやすく間違
えずにNSLayoutConstraint(制約)が作れます【Auto Layout】
http://qiita.com/yucovin/items/4bebcc7a8b1088b374c9
Auto Layout Guide
https://developer.apple.com/library/ios/documentation/
UserExperience/Conceptual/AutolayoutPG/
ProgrammaticallyCreatingConstraints.html#//apple_ref/doc/
uid/TP40010853-CH16-SW1

More Related Content

PPTX
Androidアプリ本格開発入門 webブラウザ編
PDF
使うっきゃない!iOS9で楽になったAuto Layout!
PDF
【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理
PDF
Yahoo! JAPANとKotlin
PDF
例外設計における大罪
PDF
きちんと理解できるiOS開発〜Auto Layout編
PDF
iOS 9 Bootcamp #6 UIKit
PPTX
130624 auto layout
Androidアプリ本格開発入門 webブラウザ編
使うっきゃない!iOS9で楽になったAuto Layout!
【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理
Yahoo! JAPANとKotlin
例外設計における大罪
きちんと理解できるiOS開発〜Auto Layout編
iOS 9 Bootcamp #6 UIKit
130624 auto layout
Ad

使うっきゃない!iOS9で楽になったAuto Layout!