我遇到了一个奇怪的情况。这都是在代码中完成的 - 没有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];
问题是所有内容都正确显示,但有一个例外:导航栏不可见,但标题文本和条形按钮仍然显示并正常工作。我曾尝试搞乱酒吧的hidden
和tintColor
属性,并改变了弹出窗口的大小,但没有任何变化。
我确定我错过了一些明显的东西,但我看不到它。
我的项目代码库中有类似的其他示例,但这些示例显示正确。关于为什么会发生这种情况或我如何解决它的任何想法?
修改
不确定以下内容是否会有所帮助,但我希望它能提供一些线索,告诉我们之前发生过类似情况的人真正发生的事情。
我将一个新的(空白)视图控制器推到popoverNav
上,看看会发生什么。它完美地推动和动画。除了导航栏仍然是透明的,条形按钮项目被推到视图的顶部之外,一切看起来都是正确的。
答案 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;
为什么不将内容添加为视图的子视图呢?