2012-01-28 5 views
2

So ...私の質問はちょっと変わったものです。私は、単純なUIToolbarをviewDidLoad時に呼び出されたnavigationControllerのビュー階層に追加しました。シンプルに聞こえる、そう?ここに問題があります:ツールバー自体は透明ですが、ボタンはiOS 5より少ないバージョンではありません。UIToolbar Lunacy iOSバージョン間

私は一晩かけてsetFrame、setTranslucent、setStyleの呼び出しを並べ替えて並べ替えることを試みましたが、何も働いていなかった、それは空白です!

私は脳のおならを持っていました:もし私が新しいプロジェクトを作ったら、全く同じUIToolbarを作りましたか?それはうまくいった。完璧に。だから私は別の脳のおならを持っていた:それはちょうど私のインスタンスが壊れている場合はどうですか?だから、私は既存のプロジェクトで新しいツールバーを作った。それは空白になった。

これは私のnavigationControllerのビュー階層が壊れていると信じているが、どういう意味かわからない。私の謎を解決する方法を知っている(これはシミュレータのものか、iOS 4.3.2のものなのか?)

toolbar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 22, self.view.bounds.size.width, 44)]autorelease]; 
    [toolbar setBarStyle:UIBarStyleBlackTranslucent]; 
    toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; 
    [self.view addSubview:toolbar]; 

ここでのiOS 4.3.2シミュレータ(上)とから写真は、次のとおりです。

CODEは(iOSの5+、(陽気に非推奨にもかかわらず)、および他のプロジェクトでは、だけではない鉱山で動作します) iOSの5.0.1シミュレータ(下): iOS 4.3.2 Simulator iOS 5.0.1 Simulator

EDIT:ロブの提案を1として、私はaddSubviewをself.viewするコードを変更しました...まだ変更はありません。そして、なぜ私がnavigationControllerのツールバーに組み込まれているものを利用していないのかという彼の質問については、イメージ内のそのアクションボタンによって上下にアニメーション化された2つのツールバーが実際にあるからです。

EDIT 2:わかりやすくするために、スクリーンショットを確認してください。なぜそれは見えないのですか?私はアニメーションを持って、階層を下に見ます。もし誰かがviewDidLoadメソッドを見る必要があるならば、それはかなり大量で扱いにくいです...

+0

もっと正確にしようとしています。なぜこのツールバーが必要なのですか?あなたのコードにはカスタムニーズに関するヒントはありません...通常、各ナビゲーションコントローラにはデフォルトで隠されているツールバーがあるので、UINavigationControllerの 'toolbarHidden'プロパティを使用します。ツールバーでスライダコントロールを使用する場合は、UIBarButtonItemの 'initWithCustomView'メソッドに渡します。 – lunohodov

+0

もっと正確ですか?どうやって?私はそれを立証し、コードを提供し、スクリーンショットを示すように私の問題を説明しました。おそらくもっと簡潔なものは何でしょうか? – CodaFi

+0

正確な問題が発生しています。解決しましたか? –

答えて

2

UINavigationControllerのビューツリーを混乱させるべきではありません。あなたはあなたが提供するビューツリーの部分だけを混乱させるべきです。

UINavigationControllerを使用している場合は、ナビゲーションコントローラが提供するツールバーを使用してください。

UINavigationController Class Reference: Displaying a Toolbar
UINavigationController Class Reference: Configuring Custom Toolbars
UIViewController Class Reference: setToolbarItems:animated:

+0

がself.view addSubviewに変更されました。変更はありません。また、編集を確認します。 – CodaFi

+1

それはロブが言ったことではありません。 UINavigationController.viewは、その動作が内部であり、iOSバージョン間で変更される可能性があるので、混乱させるべきではありません。代わりに、以前にナビゲーションコントローラにプッシュしたビューコントローラのビューにツールバーを追加します。 – Danra

+0

私はそれが私が上のコメントでやったことだと思います。 – CodaFi

0

それは減価償却されますので、なぜあなたはこのlike it says in the docsを試してみませんか?

[toolbar setBarStyle:UIBarStyleBlack]; 
[toolbar setTranslucent:YES]; 
+0

それは、コードを更新しませんでした。ごめんなさい。しかし、とにかく、それはまだ目に見えません。意味がない。 – CodaFi

+0

@CodaFi:あなたは、あなたが示していないコードのどこかで間違ったことをしています。詳細(さらにコード)がなければ、私たちは手助けできません。 –

+0

しかし、何ですか?それはかなり標準的なものです。 viewDidLoadメソッドは大規模ですが、シンプルです。その中のすべては単にalloc、init、およびaddSubviewです。これが起こっている理由はわかりません。ユーザーエクスペリエンスに壊滅的な影響を与えます。 – CodaFi

-1

アクションボタンに応じて2つのツールバーが上下にスライドして表示されます。あなたは本当にかかわらず...遷移としてこれを試して、2つのツールバーを必要としません:

[ toolbar setToolbarHidden: YES animated: YES ] ; 
toolbar.topViewController.toolbarItems = < whatever the new toolbar should look like > ; 
[ toolbar setToolbarHidden: NO animated: YES ]; 

ここでの考え方は、ツールバーの外観は、現在のビューコントローラ、あたりのtoolbarItemsプロパティによって制御されることですドキュメンテーションあなたは、あなたが望むものとほとんど同じように見えるカスタムツールバーアイテムインスタンスを作ることができます。

setToolbarHiddenの2つの呼び出しを分離する必要がある場合があります。実行ループに、非表示のツールバーを表示して戻すことができます。

+0

いいえ、私はすでにそれを持っています。私の質問はなぜそれが目に見えないのかということです! – CodaFi

+0

UINavigationControllerはビュー階層で必要なものを自由に実行できるため、そこに常駐しているツールバーの前に不透明なものを置くなど、目に見えません。したがって、あなたは本当にそれにあなたの意志を課そうとするのではなく、流れに行く必要があります。そのため、ナビゲーションコントローラのコードが知っているナビゲーションコントローラが提供するツールバーを使用することをお勧めします。 –

+0

しかし、これをナビゲーションビュー階層にもう追加していないので、変更されませんでした – CodaFi