UIPopoverController 以不同的速度调整弹出框和内容视图控制器(uinavigationcontroller)的大小

Posted

技术标签:

【中文标题】UIPopoverController 以不同的速度调整弹出框和内容视图控制器(uinavigationcontroller)的大小【英文标题】:UIPopoverController resizes popover and content-viewcontroller(uinavigationcontroller) at differently fast 【发布时间】:2013-09-10 08:34:57 【问题描述】:

所以这是我的问题。 我想从导航栏按钮显示一个弹出框(工作正常)。 弹出框的 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.pnghttp://i.stack.imgur.com/zJN1b.png 即使弹出框已经调整大小,内容仍然是先前弹出框大小的大小。通常它应该同时调整两者的大小

编辑:一段时间后,我尝试再次查看此问题,终于找到了适合我的解决方案。 在这个Question 中,“adnako”的回答解决了我的问题。

【问题讨论】:

【参考方案1】:

对于那些对替代解决方案感兴趣的人,我制作了demo application that shows how you can achieve correct and fluid resizing animations when working with navigation controllers inside of popovers。看看吧!

【讨论】:

以上是关于UIPopoverController 以不同的速度调整弹出框和内容视图控制器(uinavigationcontroller)的大小的主要内容,如果未能解决你的问题,请参考以下文章

UIPopoverController 的大小调整行为在 iOS 7.0 和 iOS 7.1 之间有所不同

将一个200*200的盒子以200ms/10px的速到增到到400px之后再以同样的方式缩放到原来的位置

如果以编程方式创建 UIPopoverController 中的导航栏看起来很难看

以模态方式呈现的 UIPopoverController 在 iOS 5 中不起作用

UIPopoverController 没有箭头?

UIPopoverController 按钮,防止变暗叠加?