2012-05-02 3 views
0

Я разрабатываю приложение для iPad, которое должно быть ограничено ландшафтным режимом. У меня есть контроллер корневого представления и контроллер подсмотра. Я добавляю контроллер sub view в контроллер корневого представления и устанавливаю их кадрами в 1024x768. Я ограничил приложение в ландшафтном режиме в info.plist и, на мой взгляд, метод управления shouldAutorotateToInterfaceOrientation:interfaceOrientation. Однако размеры для subview получают сброс до 768x1024 когда-то до метода viewDidAppear, что делает его , как если бы он был в портретном режиме.Как по умолчанию контроллер корневого представления для пейзажа с размером 1024x768

странно часть если установить раму для подвид, так что ширина или высота являются чем-то кроме размеров экрана, например: CGRectMake (0, 0, 1024, 767) или CGRectMake (0 , 0, 1024, 769), он не получает сброс, и отображает то, что выглядит как ландшафтный режим.

Так что мой вопрос в том, что вызывает подобное поведение. И что лучший способ просто по умолчанию все представления в ландшафтном режиме

Вот мой взгляд корневой контроллер:

// INTERFACE 

#import <UIKit/UIKit.h> 
#import "ScrapViewController.h" 

@interface ViewController : UIViewController 
{ 
    ScrapViewController *svc; 
} 
@end 


// IMPLEMENTATION 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.view.backgroundColor = [UIColor blueColor]; 
    self.view.frame = CGRectMake(0, 0, 1024, 768); 

    svc = [[SubViewController alloc] init]; 
    svc.view.backgroundColor = [UIColor redColor]; 
    svc.view.frame = CGRectMake(0, 0, 1024, 768); 

    [self.view addSubview:svc.view]; 

    NSLog(@"viewDidLoad rvc %f,%f", self.view.frame.size.width, self.view.frame.size.height); 
    NSLog(@"viewDidLoad svc %f,%f", svc.view.frame.size.width, svc.view.frame.size.height); 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight; 
} 

@end 

Вот мой суб контроллер

// INTERFACE 

#import <UIKit/UIKit.h> 

@interface SubViewController : UIViewController 

@end 


// IMPLEMENTATION 

@implementation SubViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight; 
} 

@end 
+0

просто зарегистрируйте ошибку. Это должно быть одно. –

ответ

0

вид, если используется XIb файлы, то просто сделайте xib для вашего представления в качестве ландшафта по умолчанию, т. е. проект по умолчанию для файла nib будет ландшафтным, т. е. сделайте вид ландшафта ландшафта subview в окне свойств

+0

Привет, Aalok. В моем стремлении к ландшафтному подсмотру я также попытался создать .xib, чтобы соответствовать контроллеру sub view, в котором он был настроен на пейзаж. Я создал экземпляр 'initWIthNibName: bundle' и получил тот же эффект. Когда он был установлен на 1024x768, ширина/высота менялись, но когда он был 1024x769, он работал. Я получил его для работы, сбросив фрейм в режиме 'viewDidAppear' контроллера sub view, но похоже, что это не нужно. Меня заглушат. – moshe