我有一个UIPopoverController,带有navigationController和一堆子视图。弹出窗口的大小是在如下显示之前设置的:
[self.myPopover setPopoverContentSize:CGSizeMake(320, 500)];
这很好。弹出窗口的大小已调整。当另一个视图被推到导航堆栈上时,弹出窗口的大小会再次设置-需要不同的高度-在视图中WillAppear方法:
self.contentSizeForViewInPopover = CGSizeMake(320, 700);
这也很好。当我返回到以前的视图时,大小不会改变。
我在视图中添加了相同的调用WillAppear在第一个视图中,但视图没有调整大小。
在视图之间导航时,如何管理popover的大小调整?
我使用这个破解:
- (CGSize)contentSizeForViewInPopover
{
return CGSizeMake(320, 200);
}
- (void) forcePopoverSize
{
CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f,
currentSetSizeForPopover.height - 1.0f);
self.contentSizeForViewInPopover = fakeMomentarySize;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self forcePopoverSize];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
self.contentSizeForViewInPopover = currentSetSizeForPopover;
}
这是一个棘手的问题。我尝试了很多方法,终于使这一方法奏效了。这可能对你也有用。
在我的contentViewController
中,我保留了对UIPopoverController
*父级的引用;
此引用是在初始化UIPopoverController
及其内容时设置的。当然,这可能不直接适合您的视图层次结构。UIViewController
中的代码这表明UIPopowerController
有点像:
if (self.popoverController == nil) {
_contentController = [[ContentViewController alloc] initWithNibName:@"ContentViewController"
bundle:[NSBundle mainBundle]];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:_contentController];
_contentController.parent = popover;
[popover setPopoverContentSize: CGSizeMake(520.0,580.0)];
popover.delegate = self;
self.popoverController = popover;
}
当我想在contentViewController
中动态更改内容大小时,我使用:
-(void)setNewSize:(CGSize) newSize {
[_parent setPopoverContentSize:newSize animated:YES];
}