在哪里设置popover大小?

时间:2012-08-06 21:33:38

标签: objective-c ios uitableview

我有一个名为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类应该处理的事情。

8 个答案:

答案 0 :(得分:56)

从iOS7开始contentSizeForViewInPopover已弃用。您应该使用UIViewController的{​​{1}}属性。

希望这有帮助!

答案 1 :(得分:21)

contentSizeForViewInPopover

中的ViewDidLoad方法中设置HomeViewController

答案 2 :(得分:6)

iOS 7中不推荐使用

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