なるようになるかもスマートフォン用の表示で見るなるようになるかも力は多くの場合、その人の思いを超えない。この広告は、90日以上更新していないブログに表示しています。2014-02-07UIAppearanceとUIBarPositionとバグとiOS7/6対応を考えたとき、もっとも面倒なのはナビゲーションバーの画像を用意することのように思う。Portraitとして、44px、88px(@2x)、128px(iOS7)、同様にLandscapeとして32px、64px、104pxの合計6種類の画像が必要になる。非retinaであるiPhone3GSがiOS7に対応していた場合、ここにさらに2種類増えたことになる。iPadには非retinaでもiOS7へアップデートできるものがあるが、iPadではUINavigationBarが、デバイスの向きに応じて高さを変えることはないので、Landcape用の高さの画像を用意する必要はない。その代わりiOS6/7でUITabBarの高さが違うので、4種類は必要になるんだけども。ステータスバー部分の色などどうでもいいので、128pxと104pxを切りたいと考えた。これはあまりよろしくないようだ。なってしまう上こと、そして文字色まで黒になるバグがあるからだ。移行ガイドには、ナビゲーションバーの背景画像に44ptの高さの画像を指定した場合の挙動について、UIBarPositionTopAttachedを指定している場合は黒。UIBarPositionTopを指定している場合はウインドウの背景が透けて見える。説明されているが、ウインドウの背景が透けて見えるパターンは、実際には存在しない。ほとんどの場合、UIBarPosition自体意識しないと思うので、その存在意義について説明すると。InterfaceBuilderやコードによるレイアウトで、UINavigationControllerを経由せずにUINavigationBarを表示させた場合、そのナビゲーションバーはステータスバーにめり込んでしまい、一体化しない。当該のUIViewControllerをUIBarPositioningDelegateに準拠させ、positionForBar:メソッドを実装し、UIBarPositionTopAttachedを返却するようにすると、ナビゲーションバーとステータスバーを一体化させることができる。ほとんどの場合、単純にUINavigationControllerを経由させた方が早い。UINavigationControllerを経由したUINavigationBarは、暗黙のうちにUIBarPositionTopAttachedが指定されている。このため、UIBarPositioningDelegateが必要とされる状況は極めて特殊なケースになると思われる。この周りを理解しないで作られた既存コードの改修だとか、利用している化石モノのSDKをiOS7対応のために独自に改造しなければいけないとか。InterfaceBuilderとStoryBoardIBもしくはコードレイアウトにて、と注釈をつけたのには意味があり、StoryBoardで生成したUIViewControllerでは、UIBarPositioningDelegateに準拠しても何も起こらない。IBやコードベースのレイアウトには、「そのUIViewControllerが何を経由し、どう表示されるのか分からない」という欠陥がある。ナビゲーションバーを経由し領域拡張を利用する場合、原点とすべき座標が0ptまたは64ptもしくは52ptとなることを考慮し、適切にレイアウトを組むなり、contentInsetsを設定するなりよろしくやる必要がある。対するSBは、デシリアライズされるビュー階層が、どのようなコンテキストで表示されるのかを記述できる強力なアドバンテージがある。SBで組んだレイアウトが、デシリアライズされた後にUIBarPositioningDelegateの指定によって表示を変えるのならば、それはSBにコンテキストを記述する意義を否定しているため、敢えて無視されるのだ...と考えると一応は納得はできる。実際の意図はどうなのか分からないけど。navigationBarプロパティはUINavigationControllerによって管理されているため、delegateを変更した時点でその旨のエラーログを吐いてクラッシュする。positionForBar:による変更は不可能である。そこでsetBackgroundImage:forBarPosition:barMetrics:のbarPositionの指定に意味があるのかと考えたのだけど、UIAppearance経由/直接指定に関わらず、44ptの背景画像をセットした場合には、UIBarPositionTopAttached扱いとなるため、ステータスバーの背景は黒固定になる。バグについてiOS7.0.4現在、44ptの画像を設定した場合に、ステータスバーの背景が黒固定になるにも関わらず、文字色も黒になるバグがある。UITabBarControllerによる切り替え時に、UIStatusBarStyleDefaultのままでは、文字色の判定に失敗するらしい。自分はUIAppearance経由での設定を好むので、これが発生条件の一つに絡むのかもしれない。明示的にUIStatusBarStyleLightContentを指定するなり、素直に64ptの画像を用意するすれば解決できるので致命的ではないものの、44ptの画像を使いまわして楽をしたかったという魂胆は脆くも崩れ去ったのであった。UIBarPositionTopを指定している場合はウインドウの背景が透けて見えるこれが本当だったならばなぁ。デザイン実装はつらい話のあとがきみたいなの。久々に記事を書いたのですけれど、なんか途中で力尽き...2015-01-12今更AndroidのToolbarについて理解できたような気がするのでメモ。気のせいかもしれません。こ...2014-03-03iOSでの端末固有識別子の話。とい...2014-02-01iOS7以降、自動設定される暗黙のcontentInsetsについてqiitaに書きました。Viewのリソースの話。»プロフィールiOSとかAndroidとか.NETとか。実装例っていろいろありすぎて困るよねって話。書けるように月別アーカイブはてなブログをはじめよう!quesera2さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。