43

Мне интересно узнать, как я могу изменить размер представления при использовании UIModalPresentationFormSheet из modalPresentationStyle, похоже, что он имеет фиксированный размер, поэтому мне было интересно, удалось ли кому-нибудь из них управлять всплывающим представлением из размера перспектива.UIModalPresentationFormSheet resize view

Таким образом, существует UIModalPresentationFormSheet с фиксированным размером или полными видами, и я за чем-то посредине.

+2

Возможный дубликат [Как изменить размер UIPresentationFormSheet?] (Http://stackoverflow.com/questions/2457947/how-to-resize-a-uipresentationformsheet) – JosephH 2012-03-02 18:04:34

ответ

71
MyModalViewController *targetController = [[[MyModalViewController alloc] init] autorelease]; 

targetController.modalPresentationStyle = UIModalPresentationFormSheet; 

targetController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

[self presentModalViewController:targetController animated:YES]; 

// it is important to do this after presentModalViewController:animated: 
targetController.view.superview.bounds = CGRectMake(0, 0, 200, 200); 
+48

Это нехорошее решение, потому что оно добавляет какое-то размытие в заголовок navigationItem. Это лучше: targetController.view.superview.bounds = CGRectMake (0, 0, 200, 200); Это по-прежнему центр, не нужно делать ... superview.center. – 2011-07-15 08:27:38

+0

Спасибо @BorutTomazin, который решил мою проблему – emmandroid 2012-12-07 09:39:25

+0

Размывание вызвано размещением субпикселей. Мой ответ выше исправляет это. targetController.view.superview.center = GPointMake (roundf (self.view.center.x), roundf (self.view.center.y)); – 2013-06-05 14:45:08

4

Вы можете настроить кадр модального зрения после представления его:

Испытаны в прошивкой 5.1 - 6.1, с помощью XCode 4,62

MyModalViewController *targetController = [[[MyModalViewController alloc] init] autorelease]; 
targetController.modalPresentationStyle = UIModalPresentationFormSheet; 
targetController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; //transition shouldn't matter 
[self presentModalViewController:targetController animated:YES]; 
targetController.view.superview.frame = CGRectMake(0, 0, 200, 200);//it's important to do this after presentModalViewController 
targetController.view.superview.center = GPointMake(roundf(self.view.center.x), roundf(self.view.center.y));//self.view assumes the base view is doing the launching, if not you might need self.view.superview.center etc. 

Update Предпочтительного IOS 6,0 вида контроллера представления метод работает правильно:

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion 
+0

спасибо! MyModalViewController * targetController = [[[MyModalViewController alloc] init] autorelease]; targetController.modalPresentationStyle = UIModalPresentationFormSheet; targetController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; // переход не должен иметь значения [self presentModalViewController: targetController animated: YES]; targetController.view.superview.frame = CGRectMake (0, 0, 200, 200); // важно сделать это после presentModalViewController targetController.view.superview.center = self.view.center; – tosi 2010-11-26 10:49:56

2

Просто степени Fatos решение (большой один) Если ваш создаем контроллер представления, используя .xib файл после Alloc initWithNibName можно сохранить вид кадра:

CGRect myFrame = targetController.view.frame; 
... 
targetController.view.superview.bounds = myFrame; 

И затем использовать его для superview.bounds, поэтому размер представления в .xib будет использоваться, и вы можете изменить размер более визуально.

-1

Я ставлю этот код в контроллере представления формы листа:

-(void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.view.superview.bounds = CGRectMake(0, 0, 540, 500); // your size here 
} 

Обратите внимание, что изменение размера происходит достаточно рано, что презентация анимация выглядит правильно.

4

В ios8 и более ранних работах:

AboutViewController * _aboutViewController = [[AboutViewController alloc] init]; 
    _aboutViewController.modalPresentationStyle = UIModalPresentationFormSheet; 
    if(IS_IOS8) 
    { 
     _aboutViewController.preferredContentSize = CGSizeMake(300, 300); 
    } 
    [self presentViewController:_aboutViewController animated:YES completion:nil]; 

В AboutViewController.m

- (void)viewWillLayoutSubviews{ 
    [super viewWillLayoutSubviews]; 

    if(!IS_IOS8) 
    { 
     self.view.superview.bounds = CGRectMake(0, 0, 300, 300); 
    } 
} 

IS_IOS8

#define IS_IOS8 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) 

В прошивке 8 вы также можете использовать UIPresentationController, которая дает вам больше возможностей настройки ,

3

Для iOS 8 просто реализуйте метод delegate (CGSize) preferredContentSize на каждом контроллере представления. Он должен решить все проблемы с размером.

Смежные вопросы