2013-03-19 1 views
0

Я добавляю subview к контроллеру представления, размеры которого составляют 1024 (W) x 768 (H). Мое приложение настроено на поддержку только ландшафта в plist, и все же мой subview всегда будет отображаться в портретной ориентации, его нижняя часть исчезает с экрана.Невозможно отобразить полноэкранный размер и ландшафт subview

Мой SuperView:

#import "TSTViewController.h" 
#import "TSTContentViewController.h" 

@interface TSTViewController() 
@property (nonatomic, strong) TSTContentViewController *tcvc; 
@end 

@implementation TSTViewController 

- (void)loadView 
{ 
    UIView *rootView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 1024.0f, 768.0f)]; 
    [rootView setBackgroundColor:[UIColor yellowColor]]; 
    self.view = rootView; 
    _tcvc = [[TSTContentViewController alloc] initWithNibName:@"TSTContentViewController" bundle:nil]; 
    [rootView addSubview:_tcvc.view]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    NSLog(@"H:%f W:%f; H:%f W:%f", self.view.frame.size.height, self.view.frame.size.width, _tcvc.view.frame.size.height, _tcvc.view.frame.size.width); 
} 

@end 

Мое приложение делегат:

#import "TSTAppDelegate.h" 

#import "TSTViewController.h" 

@implementation TSTAppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.viewController = [[TSTViewController alloc] init]; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

@end 

Мой подтаблицы (TSTContentViewController) не имеет собственного кода, и перо с размерами (1024W X 768H), с серым фоном ,

Казалось бы, безусловно, результат выглядит следующим образом:

(желтый надтаблицы, серый подвид) enter image description here

NSLog в viewDidAppear оттисков, что обе точки зрения имеют размеры портретной ориентации, даже желтого цвета, что на самом деле выглядит как в пейзажной ориентации.

Любые идеи?

Редактировать для дополнительных деталей:

Если ширина подвид только один пиксель меньше, вид идет ландшафт, как он должен (см тонкую желтую полосу ниже).

enter image description here

По моим наблюдениям, только точно полноэкранных причины этого подтаблица вращения. Меньшие и большие рамки сохраняют размеры, определенные в наконечнике.

+0

Вы используете autolayout? –

+0

TSTViewController (супервизор) не имеет нип. TSTContentViewController (подвью, серый) отображает то же самое с автозапуском или без него. –

+0

Добавлена ​​деталь. Если subview меньше 768 в высоту, он выглядит как ожидаемый. –

ответ

0

Если вы используете autolayout, то вам просто нужно добавить пару ограничений для подвида:

- (void)loadView 
{ 
    UIView *rootView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 1024.0f, 768.0f)]; 
    [rootView setBackgroundColor:[UIColor yellowColor]]; 
    self.view = rootView; 
    TSTContentViewController* _tcvc = [[TSTContentViewController alloc] initWithNibName:@"TSTContentViewController" bundle:nil]; 
    [self.view addSubview:_tcvc.view]; 
    [_tcvc.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[view]|" options:0 metrics:nil views:@{@"view":_tcvc.view}]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@{@"view":_tcvc.view}]]; 
} 
+0

Хорошо. Любая идея, что делать, если я не использую автозапуск? –

+0

Вам нужно переопределить '- (void) viewWilLayoutSubviews' и развернуть свой под просмотр вручную. –

+0

Хмммм хорошо, я сделаю это. Тем не менее, это происходит только при размерах в полноэкранном режиме. Возможно, ошибка в API? –