UINavigationController导航栏似乎不可见,但标题和按钮仍然可见

时间:2013-03-28 14:46:28

标签: ios objective-c ipad cocoa

我遇到了一个奇怪的情况。这都是在代码中完成的 - 没有Interface Builder。

我正在创建UIViewController并向其添加一些内容:

UIViewController* popoverViewController = [[[UIViewController alloc] init] autorelease];

UIView* popoverContentView = [[[UIView alloc] init] autorelease];
popoverContentView.backgroundColor = [UIColor blackColor];
// Add some stuff to popoverContentView

popoverViewController.view = popoverContentView;

然后我创建了一个UINavigationController,将其根视图控制器设置为上面的UIViewController,并为navigationItem添加标题和按钮:

UINavigationController* popoverNav = [[[UINavigationController alloc] initWithRootViewController:popoverViewController] autorelease];
popoverViewController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissPopover)] autorelease];
[popoverViewController.navigationItem setTitle:@"MY TITLE"];

然后我在UIPopoverController中设置UINavigationController并展示它:

self.popoverController = [[[UIPopoverController alloc] initWithContentViewController:popoverNav] autorelease];
self.popoverController.delegate = self;

[self.popoverController setPopoverContentSize:CGSizeMake(320, 216) animated:NO];
[self.popoverController presentPopoverFromRect:self.cell.frame inView:self.popoverParentView permittedArrowDirections:UIPopoverArrowDirectionUp | UIPopoverArrowDirectionDown animated:YES];

问题是所有内容都正确显示,但有一个例外:导航栏不可见,但标题文本和条形按钮仍然显示并正常工作。我曾尝试搞乱酒吧的hiddentintColor属性,并改变了弹出窗口的大小,但没有任何变化。

我确定我错过了一些明显的东西,但我看不到它。

我的项目代码库中有类似的其他示例,但这些示例显示正确。关于为什么会发生这种情况或我如何解决它的任何想法?

Invisible bar

修改

不确定以下内容是否会有所帮助,但我希望它能提供一些线索,告诉我们之前发生过类似情况的人真正发生的事情。

我将一个新的(空白)视图控制器推到popoverNav上,看看会发生什么。它完美地推动和动画。除了导航栏仍然是透明的,条形按钮项目被推到视图的顶部之外,一切看起来都是正确的。

After pushing a new view controller

1 个答案:

答案 0 :(得分:0)

可能不是问题的主要原因,但看起来UIDatePicker被您设置的CGSize剪裁了。据我所知,选择器的默认高度是216(你有),但你还没有考虑UINavigationBar所需的高度。

我不确定为什么视图的背景看起来是某种带纹理的灰色,除非在UIViewController中设置了它,但它从您粘贴的代码中看起来并不是这样。这当然不是iOS的默认纹理。

或许尝试让你的CGSize更大一些以容纳视图的内容,因为它看起来好像“完成”按钮正在拥抱右上角,那里应该有一些公平的几点间距在此默认情况下。

另外,您是否有理由创建新视图并将其指定为视图控制器的视图属性?

UIView* popoverContentView = [[[UIView alloc] init] autorelease];
popoverContentView.backgroundColor = [UIColor blackColor];
// Add some stuff to popoverContentView

popoverViewController.view = popoverContentView;

为什么不将内容添加为视图的子视图呢?