Ios5 - размер контроллера модального просмотра с раскадрой

  • Есть ли способ изменить размер View Controller, который был представлен с использованием раскладки? segue?

  • как мне представить другой контроллер просмотра с этого модального контроллера представления с переворотом перехода?

Если я определяю его как Style = Modal, Presentation = Default, Transition = Flip Horizontal, он выглядит просто странным (фон белый).

спасибо!

Ответы

Ответ 1

Да. В построителе интерфейса выберите контроллер представления и в инспекторе атрибутов установите Size в произвольную форму (из вывода). Затем выберите представление и установите его измерения в соответствии с тем, что вам нужно. Важным моментом является снятие с поля Resize View From NIB в контроллере представления, иначе просмотр снова станет полноэкранным.

Не уверен, что второй вопрос, если фон - единственная проблема, вы не можете просто установить цвет?

Надеюсь, что это поможет.

Ответ 2

Вы можете изменить размер представленного в режиме просмотра представления с помощью пользовательского UIStoryboardSegue. В раскадровке установите segue в Custom вместо Modal. В классе Segue дайте ему имя вашего переопределения UIStoryboardSegue.

Чтобы переопределить UIStoryboardSegue, вам ничего не понадобится в вашем .h файле. Он будет выглядеть примерно так:

MyStoryboardSegue.h:

#import <UIKit/UIKit.h>
@interface MyStoryboardSegue : UIStoryboardSegue
@end

В MyStoryboardSegue.m код будет выглядеть следующим образом:

#import "MyStoryboardSegue.h"

@implementation MyStoryboardSegue


- (void)perform
{
    id sourceController = self.sourceViewController;
    id destinationController = self.destinationViewController;
    UIView *destinationView = [destinationController view];
    CGFloat x, y, w, h;

    [destinationController setModalPresentationStyle:UIModalPresentationFormSheet];
    [destinationController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [sourceController presentViewController:destinationController animated:YES completion:nil];

/* 
You have to present the view first, and then resize it. That because,
as far as I can tell, when you present your view modally, a new view is created
that covers the screen in a black semi-transparent mask to give the shadow effect,
and a container view is placed in the middle of this view that in turn holds the
view you are presenting. Your view automatically resizes to the size of this
container view, so that the view you need to resize to make your view controller
appear the size you desire. You must present your modal view first 
because until you do, the container view doesn't exist. The following code
resizes the container view (which is now your modal view superview) and then
resets the position of the container view to the center of the source view that
is presenting the modal view so everything looks nice and centered.
*/
    x = destinationView.superview.frame.origin.x;
    y = destinationView.superview.frame.origin.y;
    w = 400;  // Your desired modal view width
    h = 400;  // Your desired modal view height
    destinationView.superview.frame = CGRectMake(x, y, w, h);
    destinationView.superview.center = [[sourceController view] center];
}

@end

Ответ 3

Я пытаюсь сделать то же самое, и в storyBoard мой ModalView меньше, но в симуляторе он охватывает весь экран...

Я думаю, что это невозможно сделать в iPhone... (Я сделал простой тест в iPad, и модальный вид работал).

Я попробую полупрозрачный вид для iPhone и не буду использовать Modal View.

Надеюсь, что это поможет.