Xcode Autolayout - 未选中时视图旋转
Posted
技术标签:
【中文标题】Xcode Autolayout - 未选中时视图旋转【英文标题】:Xcode Autolayout - View rotated when unchecked 【发布时间】:2013-02-25 04:32:09 【问题描述】:我在 Xcode 4.5 中使用启用自动布局创建了一个应用程序。由于它与 ios 5 不兼容(在测试之前不知道),我从情节提要中取消选中自动布局。现在在模拟器中测试时视图的内容都是顺时针旋转的。
该应用程序最初是横向的(在 Xcode 中看起来不错)。模拟器将在横向启动,但视图内的所有内容在取消选中自动布局后看起来都已旋转。
示例:
我尝试了一个新的视图控制器,但它仍然像上面那样显示。初始方向已设置为横向。有什么解决办法吗?
【问题讨论】:
【参考方案1】:要解决方向问题,请执行此操作。
在 .pch 文件中定义这些宏
#define IOS_OLDER_THAN_6 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] < 6.0 )
#define IOS_NEWER_OR_EQUAL_TO_6 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] >= 6.0 )
并在 viewContrller.m 中编写此方法
#ifdef IOS_OLDER_THAN_6
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
return (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);
#endif
#ifdef IOS_NEWER_OR_EQUAL_TO_6
-(BOOL)shouldAutorotate
return YES;
- (NSUInteger)supportedInterfaceOrientations
return (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight);
#endif
【讨论】:
请注意,预处理器指令(#define、#ifdef)在编译时而不是在运行时扩展。这两个宏都是在编译源代码时定义的,因此所有三个方法都将编译到可执行文件中。【参考方案2】:当涉及到UINavigationController
时,还有一件事,将UINavigationController
和overriding supportedInterfaceOrientations
子类化。
#import "UINavigationController+Orientation.h"
@implementation UINavigationController (Orientation)
-(NSUInteger)supportedInterfaceOrientations
return [self.topViewController supportedInterfaceOrientations];
-(BOOL)shouldAutorotate
return YES;
@end
现在,iOS 容器(例如 UINavigationController)不会咨询它们的子容器来确定它们是否应该自动旋转。如何子类
1.添加一个新文件(cocoa touch下Objective c-category)
2.Category
:方向Category On
:UINavigationController
3.将以上代码添加到UINavigationController+Orientation.m
【讨论】:
以上是关于Xcode Autolayout - 未选中时视图旋转的主要内容,如果未能解决你的问题,请参考以下文章
MPMediaPickerController 图标的背景颜色,未选中时
该复选框在未选中时不能返回 False,但在选中时可以返回 True
setTitleTextAttributes 在 swift 中未选中时不适用于 UITabBarItem