所以这是我的问题。
我想从导航栏按钮呈现一个弹出框(工作正常)。
弹出框的 contentviewcontroller 是一个 UINavigationController 和一个 UITableViewController 作为它的 rootviewcontroller。
演示文稿工作正常。
现在我选择了 tableview 的一个单元格,这导致另一个 viewcontroller 被推送到导航堆栈上。
视图控制器将被正确推送,但现在这里出现了一件奇怪的事情。
在调整内容大小(带动画)之前,弹出框将开始调整大小(不带动画)。
这就是我创建弹出框并呈现它的方式:
UINavigationController* adsl_navctl = [[[UINavigationController alloc] initWithRootViewController:adsl_newnedit] autorelease];
self.adsc_current_popover = [[[dsd_popover_controller alloc] initWithContentViewController:adsl_navctl] autorelease];
_adsc_current_popover.delegate = self;
[adsl_newnedit.tableView layoutIfNeeded];
_adsc_current_popover.popoverContentSize = CGSizeMake(_adsc_current_popover.popoverContentSize.width, adsl_newnedit.tableView.contentSize.height + 38);
[_adsc_current_popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
这是我调整弹出框大小的方法。self.contentSizeForViewInPopover 尚未在其他任何地方设置。
这在所有视图控制器中,在 uinavigationcontroller 中呈现。当然,每次的大小都不一样。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[UIView animateWithDuration:0.3 animations:^{
[self forcePopoverSize];
}];
}
}
- (void)forcePopoverSize {
CGSize currentSetSizeForPopover = CGSizeMake(320, self.tableView.contentSize.height);
CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f);
self.contentSizeForViewInPopover = fakeMomentarySize;
self.contentSizeForViewInPopover = currentSetSizeForPopover;
}
一些截图让你可以更好地理解我的问题(对不起新用户,所以不能直接发布图片)。
http://i.stack.imgur.com/copoA.png
http://i.stack.imgur.com/zJN1b.png
即使弹出框已经调整大小,内容仍然是之前弹出框的大小。通常它应该同时调整两者的大小
编辑:一段时间后,我试图再次查看这个问题,我终于找到了适合我的解决方案。在这个问题中,“adnako”的答案解决了我的问题。