用Xcode11打开一个工程,发现原来检测屏幕旋转的方法,已经出现告警,被禁用了。IOS13的坑还真是不少,还是改吧!
按照警告的提示。屏幕旋转使用以下方法,为省事,就用最简单的屏幕宽高,来判断横屏还是竖屏,但有两个小坑需要注意。
注意:首先定义一对全局变量,screenWidth和screenHeight。没用过约束,一般都用屏幕尺寸来调整控件位置,个人的习惯。
(1)在模拟器启动时,用UIDeviceOrientation的方法,获得的状态总是:UIInterfaceOrientationUnknown,也就是在刚刚启动App时,无法获得屏幕状态,检测旋转的方法也不会调用。为此,在viewDidAppear中进行检测。
(2)屏幕旋转调用的方法viewWillTransitionToSize:(CGSize)size,其中size是屏幕旋转后的size,所以,要调整屏幕控件的位置,需要用到屏幕的尺寸,就需要在这里给screenWidth和screenHeight赋值,后面再按这个尺寸处理就行了。
#pragma mark -
#pragma mark 启动时检测屏幕方向,第1个坑。
- (void)viewDidAppear:(BOOL)animated {
//获取屏幕尺寸
screenWidth = [[UIScreen mainScreen] bounds].size.width;
screenHeight = [[UIScreen mainScreen] bounds].size.height;
//启动时检测屏幕方向
//用宽度与高度比较
if ((screenWidth-screenHeight)>0) {
//横屏
//your code here
}
else {
//竖屏
//your code here
}
}
#pragma mark -
#pragma mark 屏幕翻转自动调用,但在模拟器首次启动时,该方法不会被调用,真机上没测试,有兴趣的自己测
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
//
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
/*The orientation of the phone will changing*/
//size的尺寸是将要转向的尺寸,第2个坑。
screenWidth = size.width;
screenHeight = size.height;
//用宽度与高度比较
if ((screenWidth-screenHeight)>0) {
//横屏
//your code here
}
else {
//竖屏
//your code here
}
//Other code here
}