好消息和坏消息我都有。
好消息是我找出了为什么它没有工作。 在iOS6中,QLPreviewController的navigationItem不再具有navigationBar:
(lldb) po [[self navigationItem] navigationBar];
(id) $2 = 0x00000000 <nil>
导航栏现在位于QLPreviewControllersView的视图层次结构深处:
QLPreviewViewController.view->UIView->UIView->QLRemotePreviewContentController->navBar->navItem->rightBarButtonItems。
您可以使用以下方法查找所需的navigationItem:
- (void)inspectSubviewsForView:(UIView *)view
{
for (UIView *subview in view.subviews)
{
if ([subview isKindOfClass:[UINavigationBar class]])
{
UINavigationBar *bar = (UINavigationBar *)subview;
if ([[bar items] count] > 0)
{
UINavigationItem *navItem = [[bar items] objectAtIndex:0];
[navItem setRightBarButtonItem:nil];
}
}
if ([subview isKindOfClass:[UIView class]] && [[subview subviews] count] > 0)
{
[self inspectSubviewsForView:subview];
}
}
}
只需将[self view]传递给该方法,它将循环直到找到相关的标签栏。然后,您可以删除或添加自己的标签栏。
坏消息是,您正在访问私有API,使用此功能可能会导致您的应用程序被应用商店拒绝。但这是我见过的唯一答案。希望看到是否有非私有方式来实现此操作,但考虑到其设置方式,这似乎不太可能。
此方法仅在标签栏已就位后调用才有效。最好从“viewDidAppear”中调用此方法,但它并非始终有效。