如何将根视图控制器默认为 1024x768 大小的横向

Posted

技术标签:

【中文标题】如何将根视图控制器默认为 1024x768 大小的横向【英文标题】:How to default the root view controller to landscape with a size of 1024x768 【发布时间】:2012-05-02 12:14:01 【问题描述】:

我正在开发一个需要限制为横向模式的 iPad 应用。我有一个根视图控制器 和一个子视图控制器。我将子视图控制器添加到根视图控制器并设置它们 帧到 1024x768。我在 info.plist 和我的视图控制器中将应用程序限制为横向模式 shouldAutorotateToInterfaceOrientation:interfaceOrientation 方法。然而,尺寸为 子视图在 viewDidAppear 方法出现之前的某个时间重置为 768x1024 就好像它处于纵向模式一样。

strange 部分是如果我为子视图设置框架,以便宽度或高度是某种东西 除了屏幕尺寸,例如: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

【问题讨论】:

只是提交一个错误。这应该是一个。 【参考方案1】:

如果您使用 xib 文件,则只需将您的子视图的 xib 默认设置为横向,即 nib 文件的默认设计将是横向,即在属性窗口中使您的子视图的视图横向

【讨论】:

嗨阿洛克。在我寻求景观子视图的过程中,我还尝试创建一个 .xib 以对应于将其设置为景观的子视图控制器。我用initWIthNibName:bundle 实例化了它,它达到了同样的效果。当它设置为 1024x768 时,宽度/高度被交换,但是当它是 1024x769 时它可以工作。我通过在子视图控制器的viewDidAppear 方法中重置框架来让它工作,但这似乎应该是不必要的。我受阻了。

以上是关于如何将根视图控制器默认为 1024x768 大小的横向的主要内容,如果未能解决你的问题,请参考以下文章

iOS 始终提供“详细信息”栏

IIS 8 工作进程屏幕大小限制为 1024X768

固定 UIScrollView 的子视图,而其他子视图可滚动

Django URLS,如何将根映射到应用程序?

iOS - 注销功能

如何快速调整表格视图标题的高度?