19

我有一个UIViewController被调用的HomeViewController,它有一个包含数据数组的模型。 HomeViewController还有一个按钮,按下时会显示UITableViewController模型的数据数组。

我的问题是,设置弹出框大小的标准/最佳方法是什么?我只希望弹出窗口足够高以显示数据,但不能更高。什么是普遍做法?我假设我需要contentSizeForViewInPopover在某个时候进行设置,但我不确定在哪里......在viewDidLoadpopover 类的方法中?在prepareForSegue方法上?

这是我到目前为止的代码:(请注意,这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在方法中设置这里prepareForSegue;然而,这似乎是 popover 类应该处理的事情。

4

8 回答 8

57

自 iOS7 起contentSizeForViewInPopover已弃用。您应该改用UIViewController'preferredContentSize属性。

希望这可以帮助!

于 2013-11-27T04:31:31.340 回答
21

contentSizeForViewInPopoverViewDidLoad方法中设置HomeViewController

于 2012-10-16T10:48:30.107 回答
7

contentSizeForViewInPopover在 iOS 7 中已弃用UIPopoverController
的属性:popoverContentSize表示由 UIPopoverController 的 contentViewController 属性中的视图控制器管理的内容视图的大小。
参考

优点是它在 iOS 3.2 及更高版本中可用,因此您不需要每次都检查设备版本,只需将contentSizeForViewInPopover方法替换为您的 UIPopOverController 对象实例。

于 2014-01-07T23:51:36.580 回答
4

你有没有尝试过:

setPopoverContentSize:<#(CGSize)#> animated:<#(BOOL)#>

在你的 segue 逻辑块中。如果您希望弹出框大小根据数据集或视图位置等而变化,这很有用。

于 2012-08-18T13:33:43.133 回答
3
// self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0); //Deprecated in ios7


self.preferredContentSize = CGSizeMake(320.0, 600.0); //used instead
于 2014-03-17T10:38:32.527 回答
2

试试下面的代码:

- (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];
}
于 2013-03-15T04:30:15.807 回答
2

一个鲜为人知的调整你的大小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};
}
于 2013-04-07T18:10:46.423 回答
1

看起来您想以编程方式执行此操作,但在情节提要中,在将视图控制器连接到 segue 之前,在属性检查器下有一个“弹出框,使用显式大小选项”。也许您可以先设置最适合您的应用程序的大小,而不必担心使用代码的大小。希望这会有所帮助,让我们知道它是怎么回事。

于 2012-08-06T22:11:35.377 回答