我有一个包含UINavigationController的popover。我可以很好地显示弹出窗口,而且它包含的navController也很好。navController包含一个tableView,当我选择一个项目时,它会创建一个新的详细视图:
DeviceDetailViewController *detailViewController =
[[[DeviceDetailViewController alloc] initWithNibName:@"DeviceDetailViewController" bundle:nil] autorelease];
然后我将其推送到新的视图控制器:
[self.navigationController pushViewController:detailViewController animated:YES];
这就是问题发生的时候:在按下新视图后,弹出窗口的大小会调整为iPad上可用的最大高度。
我已经尝试将xib中所有视图的高度设置为固定高度,而不是灵活高度。我已经尝试过显式设置弹出的高度。我还尝试使用不同的视图控制器作为子视图。问题仍然存在:每当一个新视图被推到导航控制器时,popover 希望自动将自己调整到最大高度。
这是一个question,它讨论了在推送新视图时故意控制弹出窗口的大小:
我认为这可能是一种蛮力控制大小的方法。然而,奇怪的是,它实际上导致了一些快速的图形怪癖(就好像视图是在新鲜的动画中),然后继续如上所述地调整大小。
换句话说,从字面上讲,某些东西迫使popover达到其最大高度,并且似乎是在调用所有委托方法之后发生的。
是导航控制器吗?有没有人见过这种东西?
发布于 2010-08-12 00:04:05
在我遇到同样的问题后(巧合的是今天也是如此),我解决了这个问题:
编辑:由于contentSizeForViewInPopover
在iOS7.0
中已弃用,因此请使用preferredContentSize
。
下面的原始答案
在您的detailViewController
中添加以下内容:
- (void)viewWillAppear:(BOOL)animated {
CGSize size = CGSizeMake(320, 480); // size of view in popover
self.contentSizeForViewInPopover = size;
[super viewWillAppear:animated];
}
您还希望添加一些类似于原始DeviceDetailViewController的内容,以防止在点击back NavbarItem时调整大小。
发布于 2011-08-04 23:54:06
就像在viewWillAppear
中处理它一样,处理这个问题的另一种方法是覆盖contentSizeForViewInPopover
。非常简洁:
-(CGSize)contentSizeForViewInPopover
{
return self.view.bounds.size;
}
发布于 2011-10-15 03:42:17
对于IOS5
我建议你在下面这样做:
- (void)viewDidLoad {
[super viewDidLoad];
CGSize size = CGSizeMake(320, 480); // size of view in popover
self.contentSizeForViewInPopover = size;
}
https://stackoverflow.com/questions/3458722
复制相似问题