以编程方式将视图调整为UIInterfaceOrientationMaskLandscapeLeft

时间:2016-09-07 04:47:58

标签: ios objective-c mobile view resize

我知道这个问题可能已经回答了几次,但是,我确实尝试过在StackOverflow上找到的所有可能的东西,但没有成功。

基本上,我有自定义的UIView类,我这样初始化:

MyUIView *test = [[MyUIView alloc] initWithFrame:self.view.bounds];

然后,我有一个NSTimer计划在5秒内通过此电话关闭:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    if (!self.isRotated) {
        self.isRotated = YES;
        appDelegate.allowLandscape = YES;
        [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger: UIInterfaceOrientationLandscapeLeft] forKey:@"orientation"];
    }else{
        self.isRotated = NO;
        appDelegate.allowLandscape = NO;
        [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger: UIInterfaceOrientationPortrait] forKey:@"orientation"];
    }

基本上这样做:

-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    if (self.allowLandscape) {
        return UIInterfaceOrientationMaskLandscapeLeft;
    }else{
        return UIInterfaceOrientationMaskPortrait;
    }
}

如果我只是在self.allowLandscape方法中将YES设置为viewDidLoad,那么它可以正常工作。但是,如果我在5秒延迟后调用NSTimer方法,则UIView不会被转换为LandscapeLeft

我可以通过使用约束来解决这个问题,但是,在这个项目中,我只使用程序化的大小。

1 个答案:

答案 0 :(得分:0)

我建议使用 AutoresizingMasks

view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
  

这将根据超类自动调整视图大小。