应用需要跟随设备横竖屏切换显示。按照网上的方法,和官方的API进行设置之后,发现状态栏跟随着设备正常切换位置 - (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 有没有支持横屏?
|
在我测试的时候,首先测试了不加tabbarcontroller的情况,只有一个navigationcontroller作为rootviewcontroller,但是并没有效果,就像上面图片的情况。根据我找到的资料,只需要重写作为rootvc的子类中的方法就可以的。所以在navigationcontroller作为rootvc的情况下,我并没有子类tabbarcontroller并重写自动旋转方法 |
|
另外,想问下,我想要横竖屏切换,不考虑视图中各种控件,元素的位置布局等,只要能能旋转到正确的方向。比如上面图中的手指能指向正确的方向,导航栏能在正确的位置。在这种情况了下,横竖屏和自动布局有关系吗?因为在请教其他人的时候,有的人直接问我有没有用自动布局……(个人觉得横竖屏在不考虑布局的情况下,和自动布局应该没关系)。
|
|
横屏和 Auto Layout 没有直接关系。
你有没有把工程设置的方向支持打开?那里是总开关。 |
|
工程设置里和info.plist里都有设置。除了upsidedown全都支持了
|
|
我写了一个非常简单的 Demo,你先看看: |
|
刚才我又写了个demo测试了下,发现,如果是直接在创建工程时就创建好的ViewController.m文件中重写方法
- (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskAllButUpsideDown; } 会正常的旋转。但是如果我自己new一个UIViewController的子类,然后在delegate.m文件中将它作为RootVC的话,就不会旋转,出现上面图中的情况 - (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分 |
不应该存在这种情况的,工程自动创建的 ViewController 也就是一个UIViewController的子类而已,你看方不方便把工程打包上传一下吧,demo也行 |
五一放假,没法把在公司写的DEMO上传,今天上传一下。我在自己的电脑上用Xcode5.1写了个demo,重写子类方法是有效的,但是在公司电脑上用Xcode6.1.1是无效的。现在上传的是用Xcode6.1.1写的DEMO。 |
|
我将Xcode升级到最新的6.3.1版本,横竖屏的问题就解决了,加上NavigationController ?和TabBarController也都能够正常额度旋转了。只需要在RootViewController的子类里重写横竖屏旋转的方法就可以了。RootViewController下的其他VC不需要再一次重写。
不过还是想知道为什么其他版本的Xcode能够生效,为什么6.1.1版本就不行。其他版本上正常旋转的项目,在6.1.1上编译就无法旋转。而在6.1.1上写好的项目,在其他版本上编译则是正常的。而且6.1.1版本中,只有默认创建的VC的子类,可以正常的实现横竖屏切换和View的旋转。 |