如何避免手动设置UIPopoverController的大小?

时间:2012-09-08 07:37:14

标签: ios ipad uipopovercontroller

当我在弹出窗口中显示ViewController时,它会调整视图的大小。为避免这种情况,我必须使用UIPopoverController setPopoverContentSize手动设置视图大小:settingsViewSize

我试图覆盖contentSizeForViewInPopover

-(CGSize)contentSizeForViewInPopover
{
    return self.view.frame.size;
}

......但无济于事。

建议?

1 个答案:

答案 0 :(得分:1)

您的代码无效,因为在contentSizeForViewInPopover之前调用viewWillDisplay,因此尚未设置视图的帧。你可以做一些事情。

如果您使用UITableViewController一个鲜为人知的技巧来调整UIPopoverViewController的大小以匹配UITableView的高度,则使用tableView的rectForSection方法为您提供高度。在viewController的contentSizeForViewInPopover中使用高度,如下所示:

- (CGSize)contentSizeForViewInPopover 
{
    // Currently no way to obtain the width dynamically before viewWillAppear.
    CGFloat width = 200.0; 
    NSInteger lastSectionIndex = [self.tableView numberOfSections] - 1;
    CGRect rect = [self.tableView rectForSection:lastSectionIndex];
    CGFloat height = CGRectGetMaxY(rect);
    return (CGSize){width, height};
}

或者,您可以在viewController的contentSizeForViewInPopopver方法中手动设置viewWillAppear:属性,并在创建时设置popover的大小。

所以,在你的viewController中,你将会有这个:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.contentSizeForViewInPopover = self.view.size
}

你会像这样创建你的popover:

MyViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"vc"];
self.currentPopover = [[UIPopoverController alloc] initWithContentViewController:vc];
[self.currentPopover presentPopoverFromRect:sender.bounds 
                                     inView:sender 
                   permittedArrowDirections:UIPopoverArrowDirectionUp 
                                   animated:YES];

// resize the popover to match what you set in vc viewDidLoad
[self.currentPopover setPopoverContentSize:vc.contentSizeForViewInPopover animated:NO];