0

以下を使用して、一連のボタンをUINavigationBarに追加しています。

    NSArray *items;

        items = [NSArray arrayWithObjects:
                 fixedSpace,
                 refreshStopBarButtonItem,
                 flexibleSpace,
                 self.backBarButtonItem,
                 flexibleSpace,
                 self.forwardBarButtonItem,
                 flexibleSpace,
                 self.actionBarButtonItem,
                 fixedSpace,
                 nil];

    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, toolbarWidth, 44.0f)];

    toolbar.items = items;

    toolbar.tintColor = [[UIColor whiteColor] colorWithAlphaComponent:1.0];

    toolbar.autoresizingMask = UIViewAutoresizingFlexibleHeight;

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:toolbar];

すべてうまく機能しています。

ただし、横向きモードに回転すると、uinavigationbar内のツールバーが回転しません。

このコード(SOにあります)を追加すると、ツールバーのサイズは変更されますが、その中のボタンは変更されないため、下部で部分的にトリミングされ、ツールバーの背景と一致しなくなります

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    CGRect navigationToolbarFrame = self.navigationController.navigationBar.frame;
    CGRect customToolbarFrame = CGRectOffset(navigationToolbarFrame, 0.0, navigationToolbarFrame.size.height);
    [UIView animateWithDuration:duration animations:^{
        //self.toolbar.frame = customToolbarFrame;
        // FAILS!!!
        //self.navigationItem.rightBarButtonItem.toolbar.frame = customToolbarFrame;
        // FAILS!!!
    }];
}

uinavigationbar内のツールバーに対処する正しい方法は何ですか?何かのようなもの...

self.toolbar.frame = customToolbarFrame;

または、UIBarButtonItemsの自動サイズ変更マスクを指定する必要がありますか?...

self.backBarButtonItem.autoresizingMask = UIViewAutoresizingFlexibleHeight;

...このようにしようとすると失敗します

4

1 に答える 1

0
  1. このコードをコードに含めると、このコードがツールバーをうまく回転させるので、非常に興味があります。ツールバーを回転させても問題ありません。

  2. ビューコントローラが応答していると思いますshouldAutorotateToInterfaceOrientationか?あなたが見ているもののスクリーンスナップショットを含めてもらえますか?

  3. UIToolbar境界線をなくすためにカテゴリ/サブクラスを実行していますか?(void)drawRect:(CGRect)rect(境界線を取り除くために空でサブクラス化するだけですが、それと標準の両方を試し、両方UIToolbarともうまく回転しました。)とにかく、のサブクラス/カテゴリを実行している場合はUIToolbar、そのコードを含めてください。

  4. また、代わりにiOS 5を使用rightBarButtonItemsしてツールバーを完全にバイパスすることもできます。たとえばself.navigationItem.rightBarButtonItems = items;、UIBarButtonItemオブジェクトの配列をナビゲーションバーに追加します。

  5. これは少し長いショットですが、View Controllerはどのようにロードされていますか?一部の人々は、バイパスpresentViewControllerAnimatedおよび/またはpushViewController代わりに、単にView Controllerを作成し、そのビューを取得して、前のViewControllerのビューのサブビューとして追加しようとします。残念ながら、これはビューコントローラ階層とビュー階層の間の切断に終わり、ビューコントローラ封じ込めに関するWWDC 2011セッション102によると、これにより回転イベントが正しく送信されない可能性があります。presentViewControllerAnimated使用していること、またはpushViewControllerこれがルートビューコントローラではないことを確認してください。

それ以降のコードは何もしませんwillAnimateRotationToInterfaceOrientation。単純なUIToolbarだけで、回転中には正常に機能するので、問題は他の場所にあるのではないかと思います。

于 2012-06-27T16:08:09.153 に答える