Привет, мне интересно, есть ли способ получить ширину программно.
Я ищу что-то достаточно общее, чтобы разместить iphone 3gs, iphone 4, ipad. Кроме того, ширина должна меняться в зависимости от того, находится ли устройство в портретной или альбомной ориентации (для iPad).
Кто-нибудь знает, как это сделать ?? Давно искал ... спасибо!
iphone
objective-c
cocoa-touch
ipad
Shai UI
источник
источник
Ответы:
Взгляните на 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, который (по умолчанию) не будет учитывать ориентацию интерфейса.
источник
CGRect screen = [[UIScreen mainScreen] bounds]; CGFloat width = CGRectGetWidth(screen); //Bonus height. CGFloat height = CGRectGetHeight(screen);
источник
Это можно сделать в трех строках кода :
// 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];
источник
Начиная с 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; }
источник
Используйте этот код, это поможет
[[UIScreen mainScreen] bounds].size.height [[UIScreen mainScreen] bounds].size.width
источник
использование:
NSLog(@"%f",[[UIScreen mainScreen] bounds].size.width) ;
источник
Вот быстрый способ получить размеры экрана, который также учитывает текущую ориентацию интерфейса:
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
источник