SlideShare a Scribd company logo
potatotips #11 
小学生でも分かった気になる 
iOS8のSize Class 
株式会社キュリオシティソフトウェア 
今城 善矩(@yimajo)
今日Size Classについて話すこと 
前編 
Size Classを用いてiPhone/iPadで同じStoryboardを使う方法 
後編 
Size Classの概念が難しい件について
前編: 
Size Classを用いてiPhone/iPadで同じ 
Storyboardを使う方法
例えばこういうデザインの時 
iPhone iPad
例えばこういうデザインの時 
iPhone iPad 
iPadのみのLabel配置したい!
例えばこういうデザインの時 
iPhone iPad 
iPadのみのLabel配置したい! 
iPadはFont大きくしたい!
例えばこういうデザインの時 
iPhone iPad 
iPadのみのLabel配置したい! 
iPadはFont大きくしたい! 
iPadは下の方を持ちづらい、ボタンが下すぎると嫌なのでマージン大きく!
これがSize Classで簡単にできて 
分かった気になるので 
1つずつやり方を説明する
前提 
Portraitのみでデバイス全画面 
のrootViewとして対応する 
iPhoneはSize Class w:C h:Rと 
して分類され 
iPadはSize Class w:R h:Rとし 
て分類される
Xcode6のInterface BuilderでSize Class 
によって出来る用になった事2つ 
1. UIコンポーネントをSize Class別に設置 
2. 一つのUIコンポーネントに対してSize Class別に設定
Xcode6のInterface BuilderでSize Class 
によって出来る用になった事2つ 
1. UIコンポーネントをSize Class別に設置 
2. 一つのUIコンポーネントに対してSize Class別に設定 
Font(等のプロパティ)を設定 
大きさや位置(Frame)を設定 
Auto Layoutを設定が出来るようになった
UIコンポーネントをSize Class 
ごとに配置する 
UIコンポーネントのFrameで 
+を押し 
w:R h:Rのinstalledのみを 
チェック☑すると 
iPadのみで存在する 
UILabelになる
Size ClassごとにFont設定 
UILabelの+をクリックし 
w:R h:Rの設定を追加すると 
iPad用のFontが 
設定される
Size ClassごとにFrameを設定するには 
これは+や☑installedは無く 
IB Design Viewの下で 
Size Classを切り替え 
その状態で指定した 
FrameがSize Classごとの 
設定となる 
iPhone iPad
結果こういう感じになる 
iPhone iPad
結果こういう感じになる 
iPhone iPad 
iPadのみUILabelをinstalled
結果こういう感じになる 
iPhone iPad 
iPadのみUILabelをinstalled 
iPadのみFontを75pt
結果こういう感じになる 
iPhone iPad 
iPadのみUILabelをinstalled 
iPadのみFontを75pt 
iPadはFrame{(x:100,y:585),(w:400,h:140)}でそれに合うAutoLayoutを指定
注意点 
iPhoneのUILabelと 
iPadのUILabelを別々に作り 
共通のViewControllerのIBOutletに繋ぐと 
片方が切り離されるから注意しよう 
(共通のUILabelにしてFrameを別にすべき)
今の例は 
Portraitのみの画面だったため 
わりと説明がしやすかった
Size Classなんとなく分かった気になった 
はず 
後半でさらに補足する
後半: 
Size Classの概念が難しい件について
お前らがなんで 
Size Classを理解できない理 
解出来ないと嘆くかについて
ネット上に公開されている 
Size Classの記事はSize Classの 
必要性が感じられないし 
Adaptivityとかいう奴が意味不明
原因として 
1.画面の回転の話を持ちだされる(iOS8で回 
転検出が変わったことに起因) 
2. iPhone6+のために作られたような記載 
3.Compact,Regularってのが分かりづらい
1. 画面の回転に関係あるの? 
回転自体はSize Classと直接は関係がなく、 
縦/横画面でのUIコンポーネントの“配置”に 
関係している。 
回転自体はAdaptivityに関係があり、 
Size ClassはAdaptivityのために必要なんだけど 
それはとりあえず一旦忘れよう。
2. iPhone6+のためにある? 
iPhone6+はLandscape時に特殊だが、 
iPhone6+のためだけにあるわけでは 
ない。
3.Compact, Regularが分かりづらい 
CompactもRegularも何を基準としてそのよう 
な名前になっているのかが不明瞭 
この名前について深く考えずに 
サイズ分類のための記号だと 
思うほうが手っ取り早い
Size ClassのC,Rについて話題になると出てくるあの表… 
Portrait 
Width 
Portrait 
Height 
Landscape 
Width 
Landscape 
Height 
iPhone4s 
iPhone5/5s 
iPhone6 
Compact Regular Compact Compact 
iPhone6+ Compact Regular Regular Compact 
iPad Regular Regular Regular Regular 
正しいがこの表の見せ方は分かりづらい…
一旦、Landscapeのことを忘れよう 
Portrait 
Width 
Portrait 
Height 
Landscape 
Width 
Landscape 
Height 
iPhone4s 
iPhone5/5s 
iPhone6 
Compact Regular Compact Compact 
iPhone6+ Compact Regular Regular Compact 
iPad Regular Regular Regular Regular 
そうすると全てのiPhoneはw:C h:Rになり 
iPadはw:R h:Rに区別できる
シンプルに書くとこうなる 
Portrait 
Width 
Portrait 
Height 
iPhone4s 
iPhone5/5s 
iPhone6/6+ 
Compact Regular 
iPad Regular Regular 
iPhone -> w:C h:R 
iPad -> w:R h:R
注意点 
現状発売されている 
iPhoneはw:C h:RでiPadはw:R h:Rだが、 
将来的にw:R h:RなiPhoneが出ない 
という確証はない! 
(XcodeからシミュレータをResizable iPhoneを 
選択するとw:R h:RなiPhoneも実行できる)
ただし 
w:R h:R なiPhoneが出たとして 
Appleのマーケテティング上それが 
iPhoneっていう名前なだけで 
そのようなiPhoneは 
iPadのレイアウトと同じになったほうが 
ユーザーにとっては好ましい気がする…
つまり 
Size Classはマーケティング上の識別子である 
iPhone,iPadの区別でレイアウトを考えるのでなく 
サイズ分類でレイアウトを変えられるように 
考えられた仕組みなんじゃないの? 
それで達成したいのがAdaptive User Interface
まとめ 
Size Class+IBでiPad用のレイアウトを手軽にできる、が 
本質的にはiPhone/iPadを識別したいわけなくSizeのClassで分 
類してレイアウトを分けるもの 
Size ClassやAuto Layoutなどの手段によってレイアウトをユー 
ザーに最適にするのがAdaptivity 
現状まだAdaptive User Interfaceはデザイナが把握していない 
だろうが、iPadのPortraitはw:R h:Rとしてレイアウトを実装し 
といても将来的に問題ない(本質には外れない)はず
参考 
Adaptive User Interfaces 
https://developer.apple.com/design/adaptivity/ 
iOS Human Interface Guidelines : Adaptivity and Layout 
https://developer.apple.com/library/ios/documentation/userexperience/conceptual/ 
mobilehig/LayoutandAppearance.html 
Size Classes Design Help 
https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/ 
AboutAdaptiveSizeDesign.html#//apple_ref/doc/uid/TP40014436-CH6-SW1
宣伝 
株式会社キュリオシティソフトウェアではiOSアプリ開発のお仕事を募集しております 
カメラアプリやチャットアプリなどユーザーの日常に近いアプリ開発を得意としています 
デザインから請け負う事もできますので 
お気軽にお問い合わせください 
http://curiosity.co.jp/

More Related Content

More from 今城 善矩 (13)

HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得するHealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
今城 善矩
 
Stargazer Meetup1
Stargazer Meetup1Stargazer Meetup1
Stargazer Meetup1
今城 善矩
 
とにかく明るいCore Spotlight
とにかく明るいCore Spotlightとにかく明るいCore Spotlight
とにかく明るいCore Spotlight
今城 善矩
 
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
今城 善矩
 
BaseViewControllerは作りたくない
BaseViewControllerは作りたくないBaseViewControllerは作りたくない
BaseViewControllerは作りたくない
今城 善矩
 
まだSwiftで消耗してるの?
まだSwiftで消耗してるの?まだSwiftで消耗してるの?
まだSwiftで消耗してるの?
今城 善矩
 
iOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtipsiOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtips
今城 善矩
 
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
今城 善矩
 
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
今城 善矩
 
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っているやはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている
今城 善矩
 
OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発
今城 善矩
 
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwwwジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww
今城 善矩
 
やはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っているやはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っている
今城 善矩
 
HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得するHealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
今城 善矩
 
とにかく明るいCore Spotlight
とにかく明るいCore Spotlightとにかく明るいCore Spotlight
とにかく明るいCore Spotlight
今城 善矩
 
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
今城 善矩
 
BaseViewControllerは作りたくない
BaseViewControllerは作りたくないBaseViewControllerは作りたくない
BaseViewControllerは作りたくない
今城 善矩
 
まだSwiftで消耗してるの?
まだSwiftで消耗してるの?まだSwiftで消耗してるの?
まだSwiftで消耗してるの?
今城 善矩
 
iOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtipsiOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtips
今城 善矩
 
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
今城 善矩
 
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
今城 善矩
 
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っているやはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている
今城 善矩
 
OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発
今城 善矩
 
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwwwジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww
今城 善矩
 
やはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っているやはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っている
今城 善矩
 

小学生でも分かった気になるiOS8のSize Class