我有一个带有AppDelegate的IPAD简单结构,其中包含来自viewController的视图:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ClockVC *clockVC = [[ClockVC alloc]init];
    clockVC.view.frame = CGRectMake(100, 100, clockVC.view.bounds.size.width, clockVC.view.bounds.size.height);

    [self.window addSubview:clockVC.view];
    [self.window makeKeyAndVisible];

    return YES;
}

clockVC具有由此代码定义的viewDidLoad:
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.autoresizingMask = UIViewAutoresizingNone;
    self.view.autoresizesSubviews = UIViewAutoresizingNone;
}

clockVC的边界由IB定义,并在application:didFinishLaunching ...中覆盖
宽度和高度分别为200和150。

ClockVC实现了一步自动旋转的方法:
/
/ Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

-(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
     [UIView animateWithDuration:0.5
                     animations:^{self.view.alpha = 0;}
     ];
}

-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    [UIView animateWithDuration:1
                     animations:^{self.view.alpha = 1;}
     ];
}

第一次加载时,将正确查看页面,并且ClockVC视图处于适当位置。
当我旋转clockVC视图(将autoResizeMask设置为UIViewAutoresizingNon)调整大小以占据整个屏幕时。

为什么??我想保留初始大小。

这是我的问题的屏幕截图。
轮换之前:

旋转后:

最佳答案

不要为此使用根视图,而应在视图控制器的视图中添加一个子视图。 UIViewControllers通常设计为填充其容器的整个空间(在这种情况下为窗口)。

例如,如果您要在UIViewController中添加UINavigationController,则导航控制器将根据导航控制器的布局(无论导航栏是否可见等)来接管调整视图控制器视图大小的责任。我不确定UIWindow的行为如何(我认为这没有很清楚地记录下来),但是在SDK的很多地方,视图控制器的父级负责其子级的位置和大小(UIPopoverControllerUITabBarController等。等)。

08-06 09:17