*

iOS6時代のアプリのiOS7への対応

公開日: : Tips , , ,

やや古い情報になるが、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を使うように修正。

関連記事

実機テストしたときのデータを取り出す

Xcodeでコンパイルして実機テストしている場合に、テストデータを実機から取り出す方法です。 以下

記事を読む

Xcode8で余計なログを抑制する

Xcode8に更新してから、妙にログが増えたので、NSLogで明示したのと実行時エラー以外のログを吐

記事を読む

UISegmentedControlに見栄え良く背景色を設定する

UISegmentedControlをiOS7で使おうとすると、基本の背景色が「透明」になりますが、

記事を読む

CoreDataのソートとsectionNameKeyPathの関係

CoreDataをフェッチするときに、indexPathのsectionにできるsectionNam

記事を読む

NSAttributedStringをローカライズする方法

NSAttributedStringをLocalizeするうまい方法はないものかと探したら、これが手

記事を読む

コードでiPhone6 Plusを識別する簡単な方法

表題の通り、コードでiPhone6 Plusを識別する簡単な方法です。 iPhone6 Plu

記事を読む

UIAutomation関連覚書

割りと忘れがちなので、自分用備忘録を兼ねて、UIAutomationに関連するtips的なものをまと

記事を読む

iOS7でカメラ撮影時のステータスバーを消す

UIImagePickerControllerをカメラモードで表示するとステータスバーがカメラの一番

記事を読む

UISplitViewControllerの仕切り線の色を設定

UISplitViewControllerで、iPadを横向き(Landscape)にしたときの2つ

記事を読む

UITableViewCellのロングタップ

UITableViewCellをロングタップしたときに、タップされたセルを認識しつつメニューを出した

記事を読む

Xcode10からのimage literal / color literalの指定方法

アセットにあるUIImageの直接指定が可能なImage litera

Xcode11でのバージョン番号の取得方法

Xcode11になってバージョン番号をスクリプトから得て自動で更新する

GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法

情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初

画面回転をしたあとに、UITextViewの先頭を表示する

回転によりサイズが可変するUITextViewで、縦向き(ポートレイト

NXDrawKitを導入してみる

ACEDrawingViewがObj-Cで書かれていて、いまいちメンテ

→もっと見る

    PAGE TOP ↑