我正在使用以下方法向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;
或者我是否必须为UIBarButtonItem指定autoresizemask?...
self.backBarButtonItem.autoresizingMask = UIViewAutoresizingFlexibleHeight;
...尝试这样做会失败
答案 0 :(得分:0)
非常好奇,因为当我将它包含在我的代码中时,此代码可以很好地旋转工具栏。旋转工具栏没问题。
我假设您的视图控制器正在响应shouldAutorotateToInterfaceOrientation
?你能否包括你所看到的屏幕快照?
您是否正在执行任何UIToolbar
类别/子类以消除其边界? (我只是用空(void)drawRect:(CGRect)rect
子类来摆脱边界,但我尝试了它和标准UIToolbar
并且都旋转得很好。)无论如何,如果你正在做{的子类/类别{1}},请包含该代码?
此外,您也可以使用iOS 5' UIToolbar
并完全绕过工具栏,例如然后rightBarButtonItems
将UIBarButtonItem对象数组添加到导航栏。
这是一个很长的镜头,但你的视图控制器是如何加载的?有些人尝试绕过self.navigationItem.rightBarButtonItems = items;
和/或presentViewControllerAnimated
而只是创建一个视图控制器,抓取其视图,将其添加为前一个视图控制器视图的子视图。不幸的是,这最终导致视图控制器层次结构和视图层次结构之间断开连接,并且根据视图控制器包含上的WWDC 2011 session 102,这可以防止正确传输旋转事件。如果您的根视图控制器不是,请确保您使用pushViewController
或presentViewControllerAnimated
。
我不做任何pushViewController
或后续代码,只是简单的UIToolbar,它在旋转期间工作正常,所以我想知道问题是否存在于其他地方。