在UINavigationController中调整工具栏的大小
我使用以下命令向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指定一个autoresizemask?...
self.backBarButtonItem.autoresizingMask = UIViewAutoresizingFlexibleHeight;
...试图这样做失败
非常好奇,因为当我将代码包含在代码中时,这段代码很好地旋转了工具栏。 旋转工具栏没有问题。
我假设你的视图控制器正在响应shouldAutorotateToInterfaceOrientation
? 你能包括你所看到的屏幕快照吗?
你在做任何UIToolbar
类别/子类消除其边界? (我只是用空的(void)drawRect:(CGRect)rect
子类(void)drawRect:(CGRect)rect
去掉边框,但我试了这两个和标准的UIToolbar
,都旋转正常)。无论如何,如果你在做UIToolbar
子类/类别,请包含该代码?
此外,你可以选择使用iOS 5的rightBarButtonItems
并完全绕过工具栏,例如self.navigationItem.rightBarButtonItems = items;
然后将UIBarButtonItem对象的数组添加到导航栏。
这有点远,但你的视图控制器是如何加载的? 有些人尝试绕过presentViewControllerAnimated
和/或pushViewController
,而是简单地创建一个视图控制器,抓住它的视图,将它添加为前一视图控制器视图的子视图。 不幸的是,这最终导致视图控制器层次结构和视图层次结构之间断开连接,并且根据关于视图控制器遏制的WWDC 2011会话102,这可以防止旋转事件被正确传输。 如果这不是您的根视图控制器,请确保使用presentViewControllerAnimated
或pushViewController
。
我不做任何willAnimateRotationToInterfaceOrientation
或后续代码,只是简单的UIToolbar,它在旋转期间工作正常,所以我不知道问题是否在其他地方。
上一篇: resize toolbar in UINavigationController
下一篇: Auto resizing UITableView on rotation with flexible width