我一直在以纵向模式编写Universal应用程序, 现在经过大约15个nib文件,许多viewCotnrollers, 我想实现shouldAutorotateToInterfaceOrientation并在横向模式下设计一些屏幕。
添加:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
到我的所有viewControllers,都不起作用。
在调试期间,我看到调用了这个方法,但它不起作用!不在模拟器中,不在设备中,不在Iphone中,不在Ipad中!
我在论坛中搜索了一些答案,并看到了一些建议:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait ||
interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
interfaceOrientation == UIInterfaceOrientationLandscapeRight ||
interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown );
}
也没用,
中加入:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
和
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
到我的viewDidLoad和viewDidUnload也分别没用。
我迷路了...任何帮助都可以!
还有一个信息...我的所有视图都是UIControl类型,因为我需要TuchUpInside才能工作。
赞赏你的帮助。
答案 0 :(得分:44)
确保所有父视图都具有autoresizesSubviews = YES。如果您没有在IB中为所有视图设置弹簧和支柱,则可能需要在代码中执行此操作。
引用Interface Builder用户指南:
重要提示:如果你在Cocoa nib文件中 不要设置任何弹簧或支柱 您在Interface Builder中的视图但是 然后使用setAutoresizingMask: 添加自动调整行为的方法 运行时,您的视图可能仍然没有 表现出正确的自动化 行为。原因是界面 Builder禁用自动调整a 如果父母一直看到孩子的话 那些孩子没有泉水 struts设置。启用自动调整大小 再次行为,你必须传递YES setAutoresizesSubviews:方法 父视图。这样做, 子视图应该正确自动调整。
还有其他一些事项需要注意:
如果UINavigationController的根视图控制器也设置为自动旋转,则它只会自动旋转。
如果UITabBarController的所有视图控制器都设置为自动旋转,则它只会自动旋转。
答案 1 :(得分:3)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
UIInterfaceOrientation des=self.interfaceOrientation;
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //iPad
{
if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)//ipad-portairait
{
}
else//ipad -landscape
{
}
}
else//iphone
{
UIInterfaceOrientation des=self.interfaceOrientation;
if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown) //iphone portrait
{
}
else //iphone -landscape
{
}
}
return YES;
}
答案 2 :(得分:1)
您要为哪个iOS构建?它在iOS 6.0中已弃用。 (您应该覆盖supportedInterfaceOrientations和preferredInterfaceOrientationForPresentation方法。)
你也可以在UIViewController类上调用shouldAutorotate:
确保您已在项目设置的“Summery”选项卡中选中了Supported Interface Orientations(在顶部的“Project Navigator”中选择项目名称)。
如果您没有在此处选择要使用的方向,则模拟器/ iphone将不允许屏幕更改方向。
答案 3 :(得分:0)
我有这个问题,但它在iOS6中有效,但在iOS5中无效。结果我在我的故事板中有一个视图,我还没有创建一个viewcontroller类。
答案 4 :(得分:0)
...最后但并非最不重要的是,确保您没有激活测试设备上的“纵向方向锁定”设置(当然不适用于模拟器),这将禁用任何应用中的旋转否无论shouldAutorotateToInterfaceOrientation
返回什么。