iOS6時代のアプリのiOS7への対応
公開日:
:
Tips iOS6, iOS7, UIPickerView, UIPopoverController
やや古い情報になるが、iOS7対応に関して自分がやったことの覚え書き。いろんな所から拾って来た情報を集積しておく。
【iOS7専用ロジックの実装】
正確には「iOS6.1以下」を見分けるロジックだが…まぁ不等号変えればいいだけの話。
if(floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1){ // ここに処理 }
iOS7ではUINavigationBar周りでデザイン、仕様が異なり、デフォルトが「バー色白、ボタンTintは空色、半透明」なため、appearanceを設定してtintとか設定してやらないといけない。
一応iOS6系統のデフォルトは半透明についてはNOがデフォルトということになっているようなのでいいのだが、色回りはUIBarButtonItemともどもTintを設定しないといけない。
また、iOS6ではUIBarButtonItemのtintプロパティはUIBarButtonStyleBorderedの場合はボーダーボタンの背景色を指定するプロパティだったのだが、UIBarButtonStylePlainの場合はボタンの文字色を指すため、appearanceなどでの色指定には気をつかわないといけない。
UINavigationBarのtint次第では見難くなることも考えられる。
自分が修正したアプリは、UINavigationBarにあるボタンだけがBorderedだったので、appearanceWhenContainedInを使ってTintの設定をするという方法を使えば、親クラスによって親クラスによるアピアランスの制限をしてくれるため、
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:[UIColor colorWithRed:10/255.0 green:20/255.0 blue:50/255.0 alpha:1]];
と設定して、他のUIBarButtonへの影響(具体的にはツールバー)を抑えて、修正をすることができた。
このappearanceの設定はiOS6以下のデザインとiOS7のデザインをわける(iOS7だとフラットデザイン風のカスタム画像を使う、とか)時にも重宝する。
【UIPopoverController関連】
UIPopoverControllerも従前は枠、背景色ともに黒っぽい色だったのが真っ白になる。黒背景を信じて設定したコンテンツの色が酷いことになったのでこれも修正。
自分でUIViewを下に敷いておけばこんなことはない。
【UIPickerViewの関連】
従前はドラム部分は自前で不透明のコンポーネント持ってたのが透明になる。
一番わかり易いのは「時計」アプリのタイマー設定部分は、背景色が白なので目立たないが、UIPickerViewをPopoverで表示しているiPadアプリなどは1つ前の修正と合わせて大変なことになる。
やっぱり自分でUIViewを下に敷くのが一番だった、というオチ。
【レイアウト】
UIViewControllerで「self.view.frame」使って子ビューのframe定義したら位置がステータスバー分ずれる。
iOS7からはレイアウトがフルスクリーン前提なので、frameのoriginがステータスバー+ナビゲーションバーの分だけ下にずれるので、当該部分はself.view.boundsを使うように修正。
関連記事
-
-
NSStringのフォーマット書式
Appleのページになく、IEEEのprintfフォーマットのページにあるので、C言語と親しくしてな
-
-
NSDictionary/NSMutableDictionaryの”valueForKey:”と”objectForKey:”の違い
表題にある通り、似ていて混同する(そして、取り違えても「たいてい」普通に動作する)NSDiction
-
-
画面回転をしたあとに、UITextViewの先頭を表示する
回転によりサイズが可変するUITextViewで、縦向き(ポートレイト)から横向き(ランドスケープ)
-
-
UIActionSheetの文字がブレて多重表示される
UIActionsheetを使っていて、iOS7/iPadの組み合わせで起こる不具合らしき挙動が起こ
-
-
ソースコードからStoryboardにアクセスする
複数のStoryboardを利用して、自分以外のStoryboardに遷移させるような展開をしたい場
-
-
UIButtonのタイトル変更時のチラつき抑制
久しぶりにXcode+Objective-Cでアプリを作っていたら、UIButtonのタイトルを動的
-
-
FormSheetでModalに表示させたビューの高さを変更する
iPadにおいて、FormSheetでModal表示させたビューの高さを変えたい場合の記事。 この
-
-
”No Scheme”になってしまった場合の対応
知人がXcodeで突然「No Scheme」表示になってRunするターゲットとデバイスが選択できない
-
-
Bitbucket課題の記法サンプル
Bitbucketの課題、およびwikiで利用できる記法についての記事です。 利用できる記法に
-
-
viewDidLoadとviewDidLayoutSubviewsのタイミング
真実の記事にある「コードでiPhone6を識別する」話とほんのちょっとだけ繋がっている話で、view