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

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

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

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

self.contentSizeForViewInPopover = CGSizeMake(320, 700);

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

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

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

【问题讨论】:

    标签: iphone ios navigationcontroller uipopover contentsize


    【解决方案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;
    }
    
    【解决方案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 小时的工作,我终于找到了一件有用的东西。我可能会尝试为此找到更优雅的解决方案......可能。我会试试你上面发布的链接。
    • 是的,我知道。有时是丑陋的,工作比好而不工作更好。 :) 如果您找到更好的解决方案,请告诉我。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多