我有一个名为UIViewController
的{{1}},它有一个包含数据数组的模型。 HomeViewController
还有一个按钮,按下时会显示HomeViewController
,显示模型的数据数组。
我的问题是,设置popover大小的标准/最佳方法是什么?我只希望弹出窗口足够高以显示数据,但不高。什么是常见做法?我假设我需要在某个时候设置UITableViewController
,但我不知道在哪里......在popover类的contentSizeForViewInPopover
方法中?在viewDidLoad
方法?
这是我到目前为止的代码:(注意prepareForSegue
是我的popover视图控制器类`)
DataPresentingViewController
我知道我可以在//In HomeViewController
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.destinationViewController isKindOfClass:[DataPresentingViewController class]])
{
DataPresentingViewController *dest = (DataPresentingViewController *) segue.destinationViewController;
dest.mySavedData = self.myModel.mySavedData;
}
}
方法中设置contentSizeForViewInPopover
;然而,这似乎是popover类应该处理的事情。
答案 0 :(得分:56)
从iOS7开始contentSizeForViewInPopover
已弃用。您应该使用UIViewController
的{{1}}属性。
希望这有帮助!
答案 1 :(得分:21)
在contentSizeForViewInPopover
ViewDidLoad
方法中设置HomeViewController
答案 2 :(得分:6)
contentSizeForViewInPopover
UIPopoverController的属性:popoverContentSize
表示由UIPopoverController的contentViewController属性中的视图控制器管理的内容视图的大小。
Reference
优点是它在iOS 3.2及更高版本中可用,因此您不需要每次都检查设备版本,只需用您的UIPopOverController对象实例替换contentSizeForViewInPopover
方法。
答案 3 :(得分:3)
今天偶然发现了你的问题。你解决了吗?
你试过了吗?
setPopoverContentSize:<#(CGSize)#> animated:<#(BOOL)#>
你的segue逻辑块中的。如果您希望弹出窗口大小可以根据数据集或视图放置等变化,则非常有用。
好。
答案 4 :(得分:2)
// self.contentSizeForViewInPopover = CGSizeMake(320.0,600.0); //在ios7中弃用
self.preferredContentSize = CGSizeMake(320.0,600.0); //用来代替
答案 5 :(得分:1)
看起来你想以编程方式进行,但在故事板中,在将视图控制器连接到segue之前,在属性检查器下有一个“popover,use explicit size选项”。也许你可以设置最适合你的应用程序的大小,而不用担心使用代码的大小。希望这有所帮助,让我们知道它是怎么回事。
答案 6 :(得分:1)
请尝试以下代码:
- (IBAction)setData:(id)sender
{
UIViewController *popoverContent=[[UIViewController alloc] init];
UITableView *tableView=[[UITableView alloc] initWithFrame:CGRectMake(265, 680, 0, 0) style:UITableViewStylePlain];
UIView *popoverView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)];
popoverView.backgroundColor=[UIColor whiteColor];
popoverContent.view=popoverView;
popoverContent.contentSizeForViewInPopover=CGSizeMake(200, 420);//setting the size
popoverContent.view=tableView;
tableView.delegate=self;
tableView.dataSource=self;
self.popoverController=[[UIPopoverController alloc] initWithContentViewController:popoverContent];
[self.popoverController presentPopoverFromRect:CGRectMake(400, 675, 0, 0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
}
答案 7 :(得分:1)
调整UIPopoverViewController
以匹配UITableView
的高度的一个鲜为人知的技巧是使用tableView的rectForSection
方法来为您提供高度。在viewController的contentSizeForViewInPopover
中使用高度,如下所示:
- (CGSize)contentSizeForViewInPopover {
// Currently no way to obtain the width dynamically before viewWillAppear.
CGFloat width = 200.0;
CGRect rect = [self.tableView rectForSection:[self.tableView numberOfSections] - 1];
CGFloat height = CGRectGetMaxY(rect);
return (CGSize){width, height};
}