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