Как мне установить первый вид UIViewController для автоматического изменения размера? - PullRequest
3 голосов
/ 02 августа 2011

У меня есть подкласс UIViewController для обработки моего представления только для ландшафтного приложения. Я бы хотел, чтобы его размер изменился, чтобы автоматически отражать размеры ландшафта, но это не так. Подвид, однако, делает.

Вот код воспроизведения.

@interface MyViewController : UIViewController {
  UIView *subview;
}

@implementation MyViewController

- (id)init
{
  self = [super init];
  if (self) {
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    subview = [[UIView alloc] initWithFrame:self.view.frame];
    subview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:subview];
  }

  return self;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
  return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
  NSLog(@"My view's frame (%f,%f)", self.view.frame.size.width, self.view.frame.size.height);
  NSLog(@"Subview's frame (%f,%f)", subview.frame.size.width, subview.frame.size.height);
}

@end

А потом ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
  self.window.rootViewController = [[MyViewController alloc] init];
  [self.window makeKeyAndVisible];
  return YES;
}

Супер просто. И все же, при загрузке, он регистрирует:

My view's frame (320.000000,480.000000)
Subview's frame (480.000000,320.000000)

Размер подпредставления корректно изменен, но родительский вид по-прежнему имеет портретно-ориентированную рамку.

Как мне изменить размер вида верхнего уровня, чтобы он соответствовал ландшафтному режиму?

Ответы [ 4 ]

3 голосов
/ 04 сентября 2012

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

window.autoresizesSubviews=YES;

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

2 голосов
/ 19 апреля 2012

Используйте это в вашем viewController

self.view.frame = [[UIScreen mainScreen] bounds];
1 голос
/ 11 мая 2016
self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Добавьте это в свой viewdidload. Убедитесь, что в раскадровке свойство представления Viewcontrollers назначено для просмотра

0 голосов
/ 03 августа 2011

Попробуйте это:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

    if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {

        //is portrait

        view.frame = CGRectMake(0,0,320,480)


    } else {

       //is landscape

       view.frame = CGRectMake(0,0,480,320);

    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...