頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


アプリのiOS 7対応であれ?って思ったこと

リリース済みアプリのiOS 7対応で「あれ?」って思ったところをメモしておくよ。
ただし、beta版の段階で対応して実はiOS 7正式版では問題ないってのもあるかもしれないのでそこのとこはテキトウに解釈してね。

(1)UIAlertViewのサブクラスが使えない
記憶が確かならリファレンスには前々からUIAlertViewのサブクラスはあかんよって記述があったんだ。でもシミュレータでもデバイスでも動いてたんだよ。そのままリリースしてたんだけど、iOS 7だとホントに動かなくなったみたい。
結局UIAlertViewのサブクラスはあきらめてコードを書き換えて対応したよ。


(2)ステータスバーが消えない
「時計で遊ぼう」ってユニバーサルアプリがあるんだけど、iPhoneの方はステータスバーが常になし、iPadは常に表示という仕様なんだ。これはプロパティリスト内の Status bar is initially hidden を NOにしといて
起動時の application:didFinishLaunchingWithOptions: 内でiPhoneの場合のみ
[application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
という処理で消していたんだけど、iOS 7だと消えなくなったんだよ。
解決方法はプロパティリストに"UIViewControllerBasedStatusBarAppearance"を追加してNOを指定。
これで意図どおりに動いてくれたよ。


(3)タブバー/ナビゲーションバーのindexが強制的に変わってる?
「赤ちゃんの成長グラフ」アプリは画面上部にナビゲーションバー、下部にタブバーがあるんだけど、グラフ拡大などをするとタブバーを隠すようにビューが表示されるんだ。

この乗せる方のビューはビューコントローラー内から
self.navigationController.tabBarController.view
に addSubview: してるんだけど、これがiOS 7だと表示されるはずのビューがなぜか表示されくなったんだよ。

原因を調べていくと、どうもタブ自体のビューのindexが常に手前になるように書き換えられてるみたいなんだ。
NSArray *array = [[targetView superview] subviews];
↑調べたいビュー(targetView)を乗せてるビューのサブビューを全て得てどういう順番になってるかをチェックしてわかったんだよ。iOS 7未満だと変わらないのにさ。
結局常に表示したいビューは手前になるようにindexを変更する処理を追加して対応したよ。


(4)ナビゲーションバーがある場合のself.viewの起点
viewController内でself.viewに何かUIView系のオブジェクトを addSubview: するってよくあると思うんだけど、このself.viewがちょっと変わったんだ。
下のコードは単にUIImageViewオブジェクトをUIViewControllerのself.viewの座標 0,0 に addSubview: してるだけだよね。
{
    UIImage *image = [UIImage imageNamed:@"image.png"];
    UIImageView *imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
    imageView.frame = (CGRect){0,0,200,200};
    [self.view addSubview:imageView];
}
ところがiOS 6と7で下のように違うんだ。

iOS 6/7比較

iOS 7だと画像がナビゲーションバーの下に潜り込んでる、、、えっ?って感じだよね。
self.view.frameのプロパティをみるとiOS 7だとフルスクリーンのサイズを示している。
そんなわけで、ナビゲーションバーを使っててかつiOS 6と7をターゲットにするなら表示するビューの位置を補正しないといけないことになる。


(5)scrollViewが縦方向に動く?
scrollViewのframeのheightとcontentSizeのheightが同じだと上下には動かないはずだと思っているんだけど、、、iOS 7だとなぜかそういかないんだ。scrollViewでそうだからUITableViewオブジェクトでも同じようなことが起きるかも。

コードはこんな感じ。
{
    float rim = 10.f;
    UIScrollView *scrollView = [[[UIScrollView alloc] initWithFrame:(CGRect){rim,20+44+rim,320-rim*2,screenHeight-20-44-rim*2}] autorelease];
    scrollView.contentSize = (CGSize){400 , scrollView.height};
    scrollView.backgroundColor = [UIColor grayColor];
    scrollView.bounces = NO;
    [self.view addSubview:scrollView];
    
    UIImage *image = [UIImage imageNamed:@"image.png"];
    UIImageView *imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
    imageView.frame = (CGRect){0,0,320,320};
    [scrollView addSubview:imageView];
}
scrollViewのframeのheightとcontentSizeのheightは同じにしている。
これだとiOS 6では画像は左右にしか動かない。そういうものだと理解しているんだけど、これがiOS 7だと縦にも動くんだよ、、、

<< UIDynamicAnimatorで遊んでみる   TopPage  iOS 6だとアイコンに光沢がついてしまう >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/808-61b42059




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad