好吧,我有好消息和坏消息。
好消息是我已经弄清楚为什么这不起作用。在 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”,但它不能 100% 工作。