Я знаю, что iOS 8 теперь возвращает правильные размеры экрана для текущей ориентации интерфейса. Чтобы получить ширину устройства для ориентации в iOS 7, вам нужно было вернуть высоту, если ориентация является альбомной или шириной, если ориентация - портретная, но вы всегда можете вернуть ширину в iOS 8. Я уже принял это во внимание для Приложение, которое я разрабатываю, будет поддерживать iOS 7 и 8. (См. код ниже)Размер основных границ экрана зависит от iOS 7 и iOS 8 при вызове willRotateToInterfaceOrientation
Однако я заметил еще одно различие. Если я назову этот метод и передам его ориентацию (полученную от willRotateToInterfaceOrientation
), то на iOS 7 он вернет правильную ширину, которая будет, но на iOS 8 она вернет ширину для старой (текущей) ориентации.
Как получить ширину экрана, когда я знаю ориентацию, в которой он сейчас находится, или будет на iOS 8 и iOS 7?
Хотя я мог бы просто поменять ширину и высоту для iOS 8, это вернет неправильное значение, когда эта функция вызывается, пока устройство не переходит к новой ориентации. Я мог бы создать два разных метода, но я ищу более чистое решение.
- (CGFloat)screenWidthForOrientation:(UIInterfaceOrientation)orientation
{
NSString *reqSysVer = @"8.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
return [UIScreen mainScreen].bounds.size.width;
}
CGRect screenBounds = [UIScreen mainScreen].bounds;
CGFloat width = CGRectGetWidth(screenBounds);
CGFloat height = CGRectGetHeight(screenBounds);
if (UIInterfaceOrientationIsPortrait(orientation)) {
return width;
} else if (UIInterfaceOrientationIsLandscape(orientation)) {
return height;
}
return width;
}
Прецеденты:
IPad погонных IOS 7:
- призывающие
[self screenWidthForOrientation:[UIApplication sharedApplication].statusBarOrientation]
вviewDidAppear
возвращает правильную ширину - призывающую
[self screenWidthForOrientation:toInterfaceOrientation]
вwillRotateToInterfaceOrientation:toInterfaceOrientation:duration
возвращает правильную ширину
IPad погонный IOS 8:
- призывающих
[self screenWidthForOrientation:[UIApplication sharedApplication].statusBarOrientation]
вviewDidAppear
возвращает правильную ширину - призывающей
[self screenWidthForOrientation:toInterfaceOrientation]
вwillRotateToInterfaceOrientation:toInterfaceOrientation:duration
возвращает неправильную ширину (что в настоящее время, прежде чем происходит вращение)