在 iOS 上的 navigationController 推送上更改 contentSizeForViewInPopover

Posted

技术标签:

【中文标题】在 iOS 上的 navigationController 推送上更改 contentSizeForViewInPopover【英文标题】:Change contentSizeForViewInPopover on navigationController push on iOS 【发布时间】:2012-03-31 20:15:53 【问题描述】:

我有一个带有 navigationController 和一堆子视图的 UIPopoverController。弹出框的大小是在显示之前设置的:

[self.myPopover setPopoverContentSize:CGSizeMake(320, 500)];

效果很好。弹出框以调整后的大小显示。当另一个视图被推送到导航堆栈时,再次设置弹出框的大小 - 需要不同的高度 - 在 vi​​ewWillAppear 方法中:

self.contentSizeForViewInPopover = CGSizeMake(320, 700);

这也很好用。当我返回上一个视图时,大小不会改变。

我在第一个视图的 viewWillAppear 中添加了相同的调用,但视图没有调整大小。

在视图之间导航时如何管理弹出框的大小调整?

【问题讨论】:

【参考方案1】:

我使用这个技巧:

- (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;

【讨论】:

***.com/questions/2752394/…【参考方案2】:

这是一个棘手的问题。我尝试了很多东西,终于让这个工作了。它也可能对你有用。

在我的contentViewController 中,我保留了对UIPopoverController *parent 的引用;

此引用在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];

【讨论】:

@BorutTomazin:我知道 - 它实际上很丑 :) 但经过 8 小时的工作,我终于找到了一件有用的东西。我可能会尝试为此找到更优雅的解决方案......可能。我会试试你上面发布的链接。 是的,我知道。有时是丑陋的,工作比好而不工作更好。 :) 如果您找到更好的解决方案,请告诉我。谢谢!

以上是关于在 iOS 上的 navigationController 推送上更改 contentSizeForViewInPopover的主要内容,如果未能解决你的问题,请参考以下文章

导航栏设置了背景图片后恢复默认

在 Swift 中对 UITabBarController 进行 segue 后如何摆脱 UINavigationController?

隐藏导航栏会导致视图向上移动

swift跳转时隐藏tabbar,跳回时显示

自定义推送动画打破默认交互式弹出动画

为什么在首次启动时我的导航栏位于状态栏下