Code Bye

app无法横屏,求大神指点,急!

应用需要跟随设备横竖屏切换显示。按照网上的方法,和官方的API进行设置之后,发现状态栏跟随着设备正常切换位置
但是view和navigationbar,tabbar都不动。
如果是普通的VC,按照找到的方法,只要重写两个方法就可以了

- (BOOL)shouldAutorotate
{
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

如果是navigationcontroller作为rootVC的话,按照找到的方法,需要在其子类里重写以下方法

-(BOOL)shouldAutorotate
{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return [self.viewControllers.lastObject supportedInterfaceOrientations];
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [self.viewControllers.lastObject preferredInterfaceOrientationForPresentation];
}

但是按照上面的方法重写后,图中的情况并没有改变。请大神们指点一下该怎么做

20分
TabBarController 有没有支持横屏
引用 1 楼 zhangao0086 的回复:

TabBarController 有没有支持横屏

在我测试的时候,首先测试了不加tabbarcontroller的情况,只有一个navigationcontroller作为rootviewcontroller,但是并没有效果,就像上面图片的情况。根据我找到的资料,只需要重写作为rootvc的子类中的方法就可以的。所以在navigationcontroller作为rootvc的情况下,我并没有子类tabbarcontroller并重写自动旋转方法

另外,想问下,我想要横竖屏切换,不考虑视图中各种控件,元素的位置布局等,只要能能旋转到正确的方向。比如上面图中的手指能指向正确的方向,导航栏能在正确的位置。在这种情况了下,横竖屏和自动布局有关系吗?因为在请教其他人的时候,有的人直接问我有没有用自动布局……(个人觉得横竖屏在不考虑布局的情况下,和自动布局应该没关系)。
横屏和 Auto Layout 没有直接关系。
你有没有把工程设置的方向支持打开?那里是总开关。
工程设置里和info.plist里都有设置。除了upsidedown全都支持了
引用 5 楼 u013912824 的回复:

工程设置里和info.plist里都有设置。除了upsidedown全都支持了

我写了一个非常简单的 Demo,你先看看:
http://download.csdn.net/detail/zhangao0086/8648275
如果还不行的话,看方不方便把你的工程打个包发上来。

刚才我又写了个demo测试了下,发现,如果是直接在创建工程时就创建好的ViewController.m文件中重写方法
- (BOOL)shouldAutorotate
{
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

会正常的旋转。但是如果我自己new一个UIViewController的子类,然后在delegate.m文件中将它作为RootVC的话,就不会旋转,出现上面图中的情况
delegate.m中代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    self.window.backgroundColor=[UIColor whiteColor];
    
    //homepage *hvc = [[homepage alloc] init];
    
    rotateview *rotavc = [[rotateview alloc] init];
    
    
    self.window.rootViewController=rotavc;
    
    [self.window makeKeyAndVisible];
    
    return YES;
}
30分
引用 9 楼 u013912824 的回复:

不应该存在这种情况的,工程自动创建的 ViewController 也就是一个UIViewController的子类而已,你看方不方便把工程打包上传一下吧,demo也行

引用 10 楼 zhangao0086 的回复:
Quote: 引用 9 楼 u013912824 的回复:

不应该存在这种情况的,工程自动创建的 ViewController 也就是一个UIViewController的子类而已,你看方不方便把工程打包上传一下吧,demo也行

五一放假,没法把在公司写的DEMO上传,今天上传一下。我在自己的电脑上用Xcode5.1写了个demo,重写子类方法是有效的,但是在公司电脑上用Xcode6.1.1是无效的。现在上传的是用Xcode6.1.1写的DEMO。
http://download.csdn.net/detail/u013912824/8658211

我将Xcode升级到最新的6.3.1版本,横竖屏的问题就解决了,加上NavigationController ?和TabBarController也都能够正常额度旋转了。只需要在RootViewController的子类里重写横竖屏旋转的方法就可以了。RootViewController下的其他VC不需要再一次重写。
不过还是想知道为什么其他版本的Xcode能够生效,为什么6.1.1版本就不行。其他版本上正常旋转的项目,在6.1.1上编译就无法旋转。而在6.1.1上写好的项目,在其他版本上编译则是正常的。而且6.1.1版本中,只有默认创建的VC的子类,可以正常的实现横竖屏切换和View的旋转。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明app无法横屏,求大神指点,急!