iOS应用中UIToolbar的奇怪行为

时间:2013-11-12 22:03:34

标签: ios objective-c uinavigationcontroller uitoolbar

在我目前的项目中,我有一个基于导航控制器的应用程序。应用程序中的某些视图需要视图底部的工具栏。我正在以编程方式创建工具栏,使用以下内容(摘自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];

这在大多数观点中都很有效。但是,我现在使用相同的代码将其合并到另一个视图中。在该控制器中,工具栏显示在视图底部上方约一英寸处 - 它不会像在其他视图控制器中那样捕捉到视图的底部。导航到问题视图后,其他视图中的其他工具栏开始显示相同的行为。这只发生在模拟器中,而不是在我的物理设备上。但是,我目前只有iPhone 4作为我的物理设备。这是模拟器中的错误还是某个问题的指示?谢谢!

1 个答案:

答案 0 :(得分: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)];

它还可能与导航栏和状态栏的存在有关