如何使用 UIModalPresentationPageSheet 调整 modalViewController 的大小

Posted

技术标签:

【中文标题】如何使用 UIModalPresentationPageSheet 调整 modalViewController 的大小【英文标题】:How to resize a modalViewController with UIModalPresentationPageSheet 【发布时间】:2012-01-23 14:14:42 【问题描述】:

我有一个模态视图控制器,我用 UIModalPresentationPageSheet 显示。问题是它的默认大小对于我的内容来说太大了:所以我想调整它的框架大小以适应我的内容。

有人知道这样做的方法/技巧吗?

谢谢。

【问题讨论】:

UIModalPresentationFormSheet 隐藏键盘有问题。当我在 UITextField 上调用 resignFirstResponder 时,键盘不会关闭。 ***.com/a/4850751/2832188 【参考方案1】:

实际上,您可以调整使用 UIModalPresentationPageSheet 呈现的视图控制器的大小。为此,您需要创建一个自定义视图控制器类并将以下内容添加到该类中:

<!--The header file-->
@interface MyViewController: ViewController
  //Used to store the bounds of the viewController
  CGRect realBounds;


<!--In the .m file-->

//viewDidLoad gets called before viewWillAppear, so we make our changes here
-(void)viewDidLoad
    //Here you can modify the new frame as you like. Multiply the 
    //values or add/subtract to change the size of the viewController.
    CGRect newFrame = CGRectMake(self.view.frame.origin.x, 
                                 self.view.frame.origin.y,       
                                 self.view.frame.size.width, 
                                 self.view.frame.size.height); 

    [self.view setFrame:newFrame];

    //Now the bounds have changed so we save them to be used later on
    _realBounds = self.view.bounds;

    [super viewDidLoad];


//viewWillAppear gets called after viewDidLoad so we use the changes 
//implemented above here
-(void)viewWillAppear:(BOOL)animated

    //UIModalpresentationPageSheet is the superview and we change 
    //its bounds here to match the UIViewController view's bounds.
    [super viewWillAppear:animated];
    self.view.superview.bounds = realBounds;


然后你用 UIModalPresentationPageSheet 显示这个视图控制器。就是这样。截至本文发布之日,这确实适用于 ios 5.1.1 和 iOS 6。

【讨论】:

这个答案太棒了。我理解海报的问题,因为我需要这个完全相同的东西。有用。这应该是批准的答案。 这个答案是一个很好的开始,但由于似乎没有办法让自定义大小的表单视图居中这一事实而受到极大限制。将各种视图和超级视图居中并没有达到预期的效果。【参考方案2】:

您无法调整 UIModalPresentationPageSheet 的大小,因为它的大小不可修改。

【讨论】:

实际上,您可以使用自定义视图控制器,该视图控制器在 UIModalPresentationPageSheet 中呈现,并引用其超级视图,从而更改其大小。我有一个下面的例子。【参考方案3】:

这适用于调整显示为UIModalPresentationFormSheet 的视图控制器的大小。我会尝试一下,我不确定它是否会起作用:

navController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:navController animated:YES];
//these two lines are if you want to make your view smaller than the standard modal view controller size
navController.view.superview.frame = CGRectMake(0, 0, 200, 200);
navController.view.superview.center = self.view.center;

【讨论】:

不起作用。在我的帖子中,我说出于某种我不想解释的原因,我需要将 PageSheet 与自定义框架一起使用。我不能使用 FormSheet。

以上是关于如何使用 UIModalPresentationPageSheet 调整 modalViewController 的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?