当我在弹出窗口中显示ViewController时,它会调整视图的大小。为避免这种情况,我必须使用UIPopoverController setPopoverContentSize手动设置视图大小:settingsViewSize
我试图覆盖contentSizeForViewInPopover
-(CGSize)contentSizeForViewInPopover
{
return self.view.frame.size;
}
......但无济于事。
建议?
答案 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];