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

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

南東京I phone勉強会(stidev) 20101030
南東京I phone勉強会(stidev) 20101030南東京I phone勉強会(stidev) 20101030
南東京I phone勉強会(stidev) 20101030
Kaz Watanabe
 
Uicollectionview
UicollectionviewUicollectionview
Uicollectionviewtowaki777
 
さわってみよう Couchbase Lite
さわってみよう Couchbase Liteさわってみよう Couchbase Lite
さわってみよう Couchbase Litessd kfk
 
iphone5 発表イベント 最速まとめLT
iphone5 発表イベント 最速まとめLTiphone5 発表イベント 最速まとめLT
iphone5 発表イベント 最速まとめLTVOYAGE GROUP
 
iphone5 発表イベント 速報まとめ
iphone5 発表イベント 速報まとめiphone5 発表イベント 速報まとめ
iphone5 発表イベント 速報まとめVOYAGE GROUP
 
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞくレイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
Fumiya Sakai
 
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
Fumiya Sakai
 
Apple Map
Apple MapApple Map
Apple Map
Tomohiro Kumagai
 
iOSアプリ制作ツールアプリビルダーを支える技術
iOSアプリ制作ツールアプリビルダーを支える技術iOSアプリ制作ツールアプリビルダーを支える技術
iOSアプリ制作ツールアプリビルダーを支える技術
Tomoki Hasegawa
 
Swift愛好会_ライブラリを使わずにゴリゴリと
Swift愛好会_ライブラリを使わずにゴリゴリとSwift愛好会_ライブラリを使わずにゴリゴリと
Swift愛好会_ライブラリを使わずにゴリゴリと
Sachiko Kajishima
 
SwiftによるiOS開発再入門
SwiftによるiOS開発再入門SwiftによるiOS開発再入門
SwiftによるiOS開発再入門
Tomoki Hasegawa
 
HTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーションHTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーション
だいすけ ふるかわ
 
Wio lte iot_hub
Wio lte iot_hubWio lte iot_hub
Wio lte iot_hub
Yoshinori Hayashi
 
iOSローカライズことはじめ
iOSローカライズことはじめiOSローカライズことはじめ
iOSローカライズことはじめ
俊輔 嶺村
 
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるiOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
Fumiya Sakai
 
スマートフォン・タブレットに対応したサイト構築の考え方
スマートフォン・タブレットに対応したサイト構築の考え方スマートフォン・タブレットに対応したサイト構築の考え方
スマートフォン・タブレットに対応したサイト構築の考え方
Youhei Iwasaki
 
iBeacon (Lightning Talk @ NDS in Niigata #1)
iBeacon (Lightning Talk @ NDS in Niigata #1)iBeacon (Lightning Talk @ NDS in Niigata #1)
iBeacon (Lightning Talk @ NDS in Niigata #1)
Masashi MATSUI
 
Universal Links対応をした話
Universal Links対応をした話Universal Links対応をした話
Universal Links対応をした話
Chiharu Nameki
 
CybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみたCybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみた
Yuma Ohgami
 
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
Tomohiro Kumagai
 

Similar to 使うっきゃない!iOS9で楽になったAuto Layout! (20)

南東京I phone勉強会(stidev) 20101030
南東京I phone勉強会(stidev) 20101030南東京I phone勉強会(stidev) 20101030
南東京I phone勉強会(stidev) 20101030
 
Uicollectionview
UicollectionviewUicollectionview
Uicollectionview
 
さわってみよう Couchbase Lite
さわってみよう Couchbase Liteさわってみよう Couchbase Lite
さわってみよう Couchbase Lite
 
iphone5 発表イベント 最速まとめLT
iphone5 発表イベント 最速まとめLTiphone5 発表イベント 最速まとめLT
iphone5 発表イベント 最速まとめLT
 
iphone5 発表イベント 速報まとめ
iphone5 発表イベント 速報まとめiphone5 発表イベント 速報まとめ
iphone5 発表イベント 速報まとめ
 
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞくレイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
 
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
 
Apple Map
Apple MapApple Map
Apple Map
 
iOSアプリ制作ツールアプリビルダーを支える技術
iOSアプリ制作ツールアプリビルダーを支える技術iOSアプリ制作ツールアプリビルダーを支える技術
iOSアプリ制作ツールアプリビルダーを支える技術
 
Swift愛好会_ライブラリを使わずにゴリゴリと
Swift愛好会_ライブラリを使わずにゴリゴリとSwift愛好会_ライブラリを使わずにゴリゴリと
Swift愛好会_ライブラリを使わずにゴリゴリと
 
SwiftによるiOS開発再入門
SwiftによるiOS開発再入門SwiftによるiOS開発再入門
SwiftによるiOS開発再入門
 
HTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーションHTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーション
 
Wio lte iot_hub
Wio lte iot_hubWio lte iot_hub
Wio lte iot_hub
 
iOSローカライズことはじめ
iOSローカライズことはじめiOSローカライズことはじめ
iOSローカライズことはじめ
 
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるiOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
 
スマートフォン・タブレットに対応したサイト構築の考え方
スマートフォン・タブレットに対応したサイト構築の考え方スマートフォン・タブレットに対応したサイト構築の考え方
スマートフォン・タブレットに対応したサイト構築の考え方
 
iBeacon (Lightning Talk @ NDS in Niigata #1)
iBeacon (Lightning Talk @ NDS in Niigata #1)iBeacon (Lightning Talk @ NDS in Niigata #1)
iBeacon (Lightning Talk @ NDS in Niigata #1)
 
Universal Links対応をした話
Universal Links対応をした話Universal Links対応をした話
Universal Links対応をした話
 
CybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみたCybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみた
 
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
 

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