さて、良いニュースと悪いニュースがあります。
良いニュースは、これが機能しない理由を理解したということです。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% の場合は機能しません。