ipad - Vista de cambio de tamaño de UIModalPresentationFormSheet
modal-dialog (6)
En ios8 y trabajos anteriores:
AboutViewController * _aboutViewController = [[AboutViewController alloc] init];
_aboutViewController.modalPresentationStyle = UIModalPresentationFormSheet;
if(IS_IOS8)
{
_aboutViewController.preferredContentSize = CGSizeMake(300, 300);
}
[self presentViewController:_aboutViewController animated:YES completion:nil];
En 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)
En iOS 8 también puedes usar UIPresentationController, que te brinda más opciones de personalización.
Estoy interesado en saber cómo puedo cambiar el tamaño de la vista al usar UIModalPresentationFormSheet
de modalPresentationStyle
, parece que tiene un tamaño fijo, por lo que me preguntaba si alguien logró manipular la vista emergente desde la perspectiva del tamaño.
Entonces, o bien UIModalPresentationFormSheet
tiene un tamaño de vista fijo o vistas completas y estoy UIModalPresentationFormSheet
algo intermedio.
Para iOS 8, simplemente implemente el método de delegado (CGSize) preferredContentSize en cada controlador de vista. Debería resolver todo el problema de tamaño.
Pongo este código en el controlador de vista de hoja de formulario:
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.view.superview.bounds = CGRectMake(0, 0, 540, 500); // your size here
}
Tenga en cuenta que el redimensionamiento ocurre lo suficientemente temprano como para que la animación de la presentación se vea correcta.
Puede ajustar el marco de una vista modal después de presentarlo:
Probado en iOS 5.1 - 6.1, utilizando 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.
Actualización El método preferido de presentación del controlador de vista iOS 6.0 también funciona correctamente:
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
Solo para ampliar la solución de Fatos (genial) Si estás creando el controlador de vista usando un archivo .xib después de alloc initWithNibName, puedes almacenar el marco de vista:
CGRect myFrame = targetController.view.frame;
...
targetController.view.superview.bounds = myFrame;
Y luego utilícelo para superview.bounds, para que se use el tamaño de la vista en .xib y pueda cambiar el tamaño de forma más visual.
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);