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

Ios 如何避免手动设置UIPopoverController的大小?,ios,ipad,uipopovercontroller,Ios,Ipad,Uipopovercontroller,当我在弹出窗口中显示ViewController时,它会调整视图的大小。为了避免这种情况,我必须使用UIPopoverController setPopoverContentSize:settingsViewSize手动设置视图大小 我已尝试覆盖contentSizeForViewInPopover -(CGSize)contentSizeForViewInPopover { return self.view.frame.size; } …但没有用 建议?您的代码不起作用,因为在视图显

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

我已尝试覆盖contentSizeForViewInPopover

-(CGSize)contentSizeForViewInPopover
{
    return self.view.frame.size;
}
…但没有用


建议?

您的代码不起作用,因为在
视图显示之前调用了
contentSizeForViewInPopover
,因此尚未设置视图的帧。不过,你可以做一些事情

如果您使用的是
UITableViewController
一个鲜为人知的调整
uipooverviewcontroller
大小以匹配
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};
}
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];
或者,您也可以手动设置viewController的
视图中的
contentSizeForvieWinPopopOver
属性将出现:
方法,并在创建时设置popover的大小

因此,在弹出窗口中的viewController中,您将看到:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.contentSizeForViewInPopover = self.view.size
}
您可以这样创建您的popover:

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

可能重复:Martin,这似乎不是同一个问题。请尝试在
contentSizeForViewInPopover
中设置显式大小:
返回CGSizeMake(200,200.)
。Martin,这是我想要避免的。我想使用IB来设计视图,如果我更改视图的大小,就不必更新代码。这是一个很大的问题,因为我的应用程序是多语言的,而且一些视图的大小因语言而异。好的,我理解。但也许这有助于缩小问题的范围:设置显式大小有效吗?contentSizeForViewInPopover在iOS7中被弃用。请尝试以下操作:查看显示:
self.preferredContentSize=self.tableView.contentSize