iphone - plus - iOS obtiene el tamaño de la pantalla física programáticamente?
iphone 6s caracteristicas (10)
es posible? Quiero el número de pulgadas, no el número de píxeles. Sé que es aproximadamente 160 ppi. Pero no exactamente
Aquí hay un método breve que calcula el tamaño de la pantalla del dispositivo. Se actualiza en cuanto a los dispositivos más recientes, pero puede fallar en los futuros (como lo podrían hacer todos los métodos de adivinar). También se confundirá si el dispositivo se está duplicando (devuelve el tamaño de la pantalla del dispositivo, no el tamaño de la pantalla reflejada)
#define SCREEN_SIZE_IPHONE_CLASSIC 3.5
#define SCREEN_SIZE_IPHONE_TALL 4.0
#define SCREEN_SIZE_IPAD_CLASSIC 9.7
+ (CGFloat)screenPhysicalSize
{
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if (result.height < 500)
return SCREEN_SIZE_IPHONE_CLASSIC; // iPhone 4S / 4th Gen iPod Touch or earlier
else
return SCREEN_SIZE_IPHONE_TALL; // iPhone 5
}
else
{
return SCREEN_SIZE_IPAD_CLASSIC; // iPad
}
}
Aquí hay una forma rápida de obtener tamaños de pantalla:
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
}
Estos se incluyen como una función estándar en:
Desde que se hizo esta pregunta, he creado una biblioteca de código abierto para manejar este problema: IRLSize . Se puede usar en cualquier dirección: para medir el tamaño de una vista (o toda la pantalla) en dimensiones del mundo real, o para establecer el tamaño de una vista en una dimensión específica del mundo real.
Es posible que necesite usar [UIScreen mainScreen].scale;
CGFloat scale = [UIScreen mainScreen].scale;
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat physicalWidth = screenRect.size.width * scale;
CGFloat physicalHeight = screenRect.size.height * scale;
La "fórmula" que uso es
#define IS_iPhone5 ( fabs( (double)[ [ UIScreen mainScreen ] bounds ].size.height - (double)568 ) < DBL_EPSILON )
Nadie dijo sobre fixedCoordinateSpace
. En Swift 3 para obtener las dimensiones de la pantalla en una orientación vertical, debe usar: UIScreen.main.fixedCoordinateSpace.bounds
No hay una API que te dé esto. Su mejor opción es mirar el tamaño de la pantalla del dispositivo (en puntos) y de esa conjetura si se trata de un iPad o iPhone, etc., y luego usar valores codificados para los tamaños de pantalla.
Aquí hay un código para obtener el tamaño de la pantalla:
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
Tenga en cuenta que el ancho y la altura pueden intercambiarse, según la orientación del dispositivo.
Si estuviera disponible, sería en UIScreen o UIDevice pero no está allí.
Puede inferirlo a partir de la información en la extensión de UIDevice de Erica y las especificaciones para cada dispositivo enumerado aquí en Wikipedia .
Tal vez el código de Jeff Hay se puede adaptar para incluir iPad Mini. El truco es obtener el identificador del modelo del dispositivo. El iPad no retina más reciente es "iPad2,4" y el primer iPad mini es "iPad2,5". Ahora todo lo que necesita verificar es si la escala de la pantalla es 1.0 (no retina)
Aunque este código no es a prueba de futuro, siempre puede agregar más reglas para los identificadores de modelo.
#import <sys/utsname.h>
#define SCREEN_SIZE_IPAD_MINI 7.9
struct utsname systemInfo;
uname(&systemInfo);
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && strcasecmp(systemInfo.machine, "iPad2,5") >= 0 [[UIScreen mainScreen] scale] == 1.0)
return SCREEN_SIZE_IPAD_MINI
CGFloat scale = [UIScreen mainScreen].scale; CGRect screenRect = [[UIScreen mainScreen] bounds]; CGFloat screenWidth = screenRect.size.width * (scale/100.0f); CGFloat screenHeight = screenRect.size.height * (scale/100.0f);
- la escala es persent!