0

私の現在のプロジェクトでは、ナビゲーション コントローラーに基づくアプリがあります。アプリの一部のビューでは、ビューの下部にツールバーが必要です。次のプログラムでツールバーを作成しています(テーブルビューコントローラーのviewDidLoadから抜粋):

UIBarButtonItem *reloadButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshList)];

[reloadButton setTitle:@"Refresh"];
[reloadButton setTintColor:[UIColor whiteColor]];

self.navigationController.toolbar.barStyle = UIBarStyleBlackTranslucent;
[self.navigationController.toolbar sizeToFit];
CGFloat toolbarHeight = [self.navigationController.toolbar frame].size.height;
[self.navigationController.toolbar setFrame:CGRectMake(CGRectGetMinX(self.view.bounds),
                                                       438,
                                                       CGRectGetWidth(self.view.bounds),
                                                       toolbarHeight)];
NSArray *toolbarItems = [[NSArray alloc] initWithObjects:reloadButton, nil];
[self setToolbarItems:toolbarItems];
[self.navigationController setToolbarHidden:NO];

これは、ほとんどのビューでうまく機能しています。ただし、現在、同一のコードを使用して別のビューに組み込んでいます。そのコントローラーでは、ツールバーはビューの下部から約 1 インチ上に表示されます。他のビュー コントローラーのように、ビューの下部にスナップしません。問題のあるビューに移動すると、他のビューの他のツールバーが同じ動作を示し始めます。これはシミュレーターでのみ発生しており、物理デバイスでは発生していません。ただし、現在、物理デバイスとして iPhone 4 しか持っていません。これはシミュレーターのバグですか、それともどこかに問題があることを示していますか? ありがとう!

4

1 に答える 1

1

y 位置をハードコードされた値 438 に設定しています。これにより、背の高い iPhone 5 の画面の下部に表示されなくなります)。おそらく次の方法で y 位置も計算する必要があります。

CGRectGetMaxY(self.view.bounds) - toolbarHeight

これにより、次のようになります。

[self.navigationController.toolbar setFrame:CGRectMake(CGRectGetMinX(self.view.bounds),
                                                   CGRectGetMaxY(self.view.bounds) - toolbarHeight,
                                                   CGRectGetWidth(self.view.bounds),
                                                   toolbarHeight)];

また、ナビゲーション バーとステータス バーの存在も関係している可能性があります。

于 2013-11-12T22:18:24.640 に答える