2

我使用提供的模板创建了一个基本的 Master/Detail iPad 应用程序。它创建了两个视图控制器(Master 和 Detail)。我创建了一个视图附加视图控制器,这些视图控制器在主视图控制器顶部弹出(几乎向下钻取表格视图,直到最终点击填充详细视图的单元格。我添加了下面的代码以加载主视图控制器弹出框到指定的尺寸(下面的代码还显示从主视图控制器表视图中选择选择时):

@implementation MasterViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.vehicles = [[NSArray alloc] initWithObjects:@"Cars", @"Trucks", @"Boats", nil];

        self.title = @"Vehicle Type";
        self.clearsSelectionOnViewWillAppear = NO;
        self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    }
    return self;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.studySessionViewController)
    {
        self.secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    }
    [self.navigationController pushViewController:self.secondViewController animated:YES];
}

当应用程序首次加载时选择弹出框时,一切看起来都很棒。但是,当用户点击返回 MasterViewController 时,弹出框的大小与被压入堆栈的最大视图控制器的大小相同。我四处搜索,并在主视图控制器类中添加了以下代码:

- (void)viewWillAppear:(BOOL)animated
{
    self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    [super viewDidAppear:animated];
}

但是,这没有效果。同样,一旦弹出框关闭(通过旋转或取消选择 UI 上的弹出框),之前推送到堆栈上的最大 table view 控制器的弹出框大小仍然保留,并完全忽略上述尺寸。我错过了什么?

4

3 回答 3

6

我无法理解你的整个问题,但我认为你的问题的基础是 Popover 的大小不好。

通常,Popover 大小的问题在于[UIViewController contentSizeForViewInPopover]只能在创建UIPopoverController实例之前设置。它只是弹出框大小的默认值。

当您UIPopoverController使用控制器创建实例作为其内容时,将contentSizeForViewInPopover被复制到[UIPopoverController popoverContentSize]其中并且不再读取。如果您在内容上更改它,则不会更新 Popover 大小。

UIPopoverController更改已创建实例大小的唯一方法是使用 property[UIPopoverController popoverContentSize]或 method [UIPopoverController setPopoverContentSize:animated:]

于 2011-12-09T15:47:05.017 回答
3

您正在尝试在 MasterViewController 本身中设置弹出框大小。问题就在这里。为了self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);工作,您必须在 DetailViewController 中使用它,因为 DetailViewController 是具有弹出框的那个。这里的基本思想是您在父视图控制器中设置大小,而不是控制器本身。

于 2011-12-03T10:27:27.470 回答
2

你将不得不设置框架。

incomingCallViewController = [[IncomingCallViewController alloc]initWithNibName:@"IncomingCallViewController" bundle:nil];
            [incomingCallViewController.view setFrame:CGRectMake(400, 200, 377, 243)];

            [self.navigationController pushViewController:incomingCallViewController.view]; 

这当然是我的一个项目中的示例代码,用您自己的类替换incomingCallViewController 并在标题中声明它

于 2011-11-29T17:49:45.580 回答