IPhone/IPad: Как получить ширину экрана программно?
Привет, мне интересно, есть ли способ получить ширину программно.
Я ищу что-то достаточно общее, чтобы разместить iphone 3gs, iphone 4, ipad. Кроме того, ширина должна изменяться в зависимости от того, является ли устройство портретным или альбомным (для ipad).
Кто-нибудь знает, как это сделать? Я искал какое-то время... спасибо!
Ответы
Ответ 1
Взгляните на UIScreen.
например.
CGFloat width = [UIScreen mainScreen].bounds.size.width;
Взгляните на свойство applicationFrame, если вы не хотите включать строку состояния (не влияет на ширину).
ОБНОВЛЕНИЕ: Оказывается, UIScreen (-bounds или -applicationFrame) не учитывает текущую ориентацию интерфейса. Более правильным подходом было бы задать ваш UIView для своих границ - если этот UIView был автоматически повернут с помощью контроллера View.
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
CGFloat width = CGRectGetWidth(self.view.bounds);
}
Если представление не будет автоматически повернуто контроллером просмотра, вам нужно будет проверить ориентацию интерфейса, чтобы определить, какая часть границ представления представляет "ширину" и "высоту". Обратите внимание, что свойство frame даст вам прямой вид в пространстве координат UIWindow, который (по умолчанию) не будет учитывать ориентацию интерфейса.
Ответ 2
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
//Bonus height.
CGFloat height = CGRectGetHeight(screen);
Ответ 3
Это можно сделать в в 3 строках кода:
// grab the window frame and adjust it for orientation
UIView *rootView = [[[UIApplication sharedApplication] keyWindow]
rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];
Ответ 4
Как и в iOS 9.0, нет возможности надежно ориентировать ориентацию. Это код, который я использовал для приложения я для только портретного режима, поэтому, если приложение открыто в ландшафтном режиме, оно будет по-прежнему точным:
screenHeight = [[UIScreen mainScreen] bounds].size.height;
screenWidth = [[UIScreen mainScreen] bounds].size.width;
if (screenWidth > screenHeight) {
float tempHeight = screenWidth;
screenWidth = screenHeight;
screenHeight = tempHeight;
}
Ответ 5
Используйте этот код, который поможет
[[UIScreen mainScreen] bounds].size.height
[[UIScreen mainScreen] bounds].size.width
Ответ 6
Вот быстрый способ получить размеры экрана, это также учитывает текущую ориентацию интерфейса:
var screenWidth: CGFloat {
if UIInterfaceOrientationIsPortrait(screenOrientation) {
return UIScreen.mainScreen().bounds.size.width
} else {
return UIScreen.mainScreen().bounds.size.height
}
}
var screenHeight: CGFloat {
if UIInterfaceOrientationIsPortrait(screenOrientation) {
return UIScreen.mainScreen().bounds.size.height
} else {
return UIScreen.mainScreen().bounds.size.width
}
}
var screenOrientation: UIInterfaceOrientation {
return UIApplication.sharedApplication().statusBarOrientation
}
Они включены как стандартная функция в:
https://github.com/goktugyil/EZSwiftExtensions