在推送到UINavigationController时隐藏FBFriendPickerViewController导航栏

使用presentViewController:animated:completion:呈现FBFriendPickerViewController的实例presentViewController:animated:completion:非常简单,类看起来就像是用于该用例。 但是,我想使用pushViewController:animated:FBFriendPickerViewController的实例推送到UINavigationController的实例pushViewController:animated: .

请考虑以下代码作为示例:

 self.fbFriendPickerController = [[FBFriendPickerViewController alloc] init]; self.fbFriendPickerController.hidesBottomBarWhenPushed = YES; // configure stuff [[self navigationController] pushViewController:self.fbFriendPickerController animated:YES]; 

但是,问题是FBFriendPickerViewController的实例已经有一个顶部导航栏。 当推入UINavigationController ,这会导致两个顶部导航栏垂直堆叠,如下面的屏幕截图所示。

双顶导航栏

一种解决方案是隐藏UINavigationController的顶部导航栏,但这会产生一个尴尬的过渡,并且没有后退按钮。 有关保持UINavigationController顶部导航栏但隐藏FBFriendPickerViewController顶部导航栏的最佳方法的任何想法?

在浏览了Github上的Facebook iOS SDK 源代码后 ,我发现了这一点。 FBFriendPickerViewControllerFBFriendPickerViewController的子类。 如果将任何FBViewControllerdoneButtoncancelButton属性FBViewControllernilFBViewController将删除顶部导航栏。 因此,以下代码有效:

 self.fbFriendPickerController = [[FBFriendPickerViewController alloc] init]; self.fbFriendPickerController.hidesBottomBarWhenPushed = YES; self.fbFriendPickerController.doneButton = nil; self.fbFriendPickerController.cancelButton = nil; // configure stuff [[self navigationController] pushViewController:self.fbFriendPickerController animated:YES];