如何调整UIModalPresentationFormSheet的大小?

问题描述 投票:45回答:13

我正在尝试将模式视图控制器显示为UIPresentationFormSheet。该视图出现了,但是我似乎无法调整其大小。我的XIB具有适当的高度和宽度,但是当我这样称呼它时,它似乎被覆盖了:

composeTweetController = [[ComposeTweet alloc] initWithNibName:@"ComposeTweet" bundle:nil];
composeTweetController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:composeTweetController animated:TRUE];

有什么想法吗?我正在使用iPhone SDK 3.2 beta 4

iphone objective-c cocoa-touch uikit
13个回答
91
投票

您可以在显示模式视图后对其进行调整:

在iOS 5.1-7.1中测试

MyModalViewController *targetController = [[[MyModalViewController alloc] init] autorelease];
targetController.modalPresentationStyle = UIModalPresentationFormSheet;
targetController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;  //transition shouldn't matter
[self presentViewController:targetController animated:YES completion:nil];

if(floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1){
     targetController.view.superview.frame = CGRectInset(targetController.view.superview.frame, 100, 50);
}else{
     targetController.view.frame = CGRectInset(targetController.view.frame, 100, 50);
     targetController.view.superview.backgroundColor = [UIColor clearColor];
}

2
投票

@ bdrobert不幸的是,您不错的解决方案在iOS6


0
投票

更改方向后,此代码可完美工作。...


0
投票

现代ios13方式:


-4
投票

视图大小是固定的。如果您想要不同的东西,则必须自己实现。


13
投票

这是在iOS7以及iOS5和iOS6上都可以使用的方法:(弧形)

-(void)presentController:(UIViewController*)controller fromRootController:(UIViewController*)rootController withSize:(CGSize)size
{
    UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:controller];
    nav.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    nav.modalPresentationStyle = UIModalPresentationFormSheet;
    [rootController presentModalViewController:nav animated:YES];
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
    {
        nav.view.superview.backgroundColor = [UIColor clearColor];
        nav.view.bounds = CGRectMake(0, 0, size.width, size.height);
    }
    else
    {
        nav.view.superview.bounds = CGRectMake(0, 0, size.width, size.height);
    }
}

12
投票

composeTweetController = [[ComposeTweet alloc] initWithNibName:@"ComposeTweet" bundle:nil];
composeTweetController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:composeTweetController animated:TRUE];
//if you want to change its size but the view will remain centerd on the screen in both portrait and landscape then:
composeTweetViewController.view.superview.bounds = CGRectMake(0, 0, 320, 480);
//or if you want to change it's position also, then:
composeTweetViewController.view.superview.frame = CGRectMake(0, 0, 320, 480);

9
投票

从iOS7开始,您可以轻松完成

composeTweetController.preferredContentSize = CGSizeMake(380.0, 550.0);

4
投票

经过测试,适用于iOS 6,使用XCode 4.5] >>

在阅读了这里的许多技巧后,我偶然发现了答案:

  1. viewWillAppear:(BOOL)animated方法中:

    [super viewWillAppear:animated];
    
     //resize modal view
     self.view.superview.bounds = CGRectMake(0, 0, 432, 680);
    
  2. viewDidAppear:(BOOL)animated方法中:

  3. CGPoint centerPoint = CGPointMake([[UIScreen mainScreen] bounds].size.width/2, [[UIScreen mainScreen] bounds].size.height/2);
    self.view.superview.center = centerPoint;
    

    我试图将居中代码与调整大小的代码添加到同一位置,但这没有用。由于某些原因,它仅在视图出现在屏幕上后才起作用。

我想它与UIModalPresentationFormSheet的工作方式有关,因为当我在LLDB调试器中逐步执行时,我注意到有一个变量_formSheetSize仍然为{540,620}。去图。


4
投票

这将适用于任何UIModalTransitionStyle


4
投票

以下代码是如何显示模型视图控制器的方法


3
投票

iOS 7


2
投票

我从UIPresentationFormSheet获得了全屏模式视图,仅此一行:

© www.soinside.com 2019 - 2024. All rights reserved.