precio caracteristicas 16gb ios iphone xcode autolayout size-classes

ios - caracteristicas - iphone 5



Clase de tamaño específicamente para retratos de 3,5 pulgadas(iPhone 4S) XCode 6? (4)

Estoy ajustando mi aplicación de UI, pero tengo un problema que no puedo resolver.

Como puedo ver, la altura compacta afecta a todos los iPhones de menos de 4.7 pulgadas, pero mi interfaz de usuario está bien, excepto para el iPhone 4S (3.5 pulgadas).

No quiero modificar el diseño de todos los iPhones de menos de 4.7 pulgadas, solo el iPhone 4S, al mismo tiempo no quiero dejar de lado este dispositivo.

¿Hay alguna solución para que pueda configurar las enmiendas pero solo y solo para el retrato de 3.5 pulgadas? ¿O debería decir adiós a 100 millones de dispositivos por ahí?

Sé que es una pregunta difícil y casi una encuesta de opinión, pero técnicamente, me gustaría encontrar mi mejor salida aquí.


@todo no puedo hacer las cosas más pequeñas, porque estoy tratando con pickerviews que tienen solo tres alturas válidas para UIPickerView (162.0, 180.0 y 216.0). Tamaños y restricciones aparte.

Tamaños de iPhone: http://www.idev101.com/code/User_Interface/sizes.html , 4S es único.

Entonces, aunque mi enfoque es un poco feo, hacer las cosas, casi en mi opinión.

Así que sé que está lejos de Goodville, no me pegues, solo por compartir:

func checkForiPhone4S() { if (UIScreen.mainScreen().bounds.size.height == 480) { println("It is an iPhone 4S - Set constraints") listPickerView.transform = CGAffineTransformMakeScale(1, 0.8); var constraintHeight = NSLayoutConstraint(item: listPickerView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 100) self.view.addConstraint(constraintHeight) datePickerView.transform = CGAffineTransformMakeScale(1, 0.8); var constraintHeightDate = NSLayoutConstraint(item: datePickerView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 100) self.view.addConstraint(constraintHeightDate) } }


No hay clase de tamaño para iPhone 3.5 pulgadas.

Así que he creado una categoría de clase para NSLayoutConstraint para editarla en Interface Builder, que es muy fácil de usar:

@interface NSLayoutConstraint (Extensions) @property (nonatomic) IBInspectable CGFloat iPhone3_5_Constant; @end

-

@implementation NSLayoutConstraint (Extensions) - (CGFloat)iPhone3_5_Constant { return self.constant; } - (void)setIPhone3_5_Constant:(CGFloat)iPhone3_5_Constant { if ([UIScreen mainScreen].bounds.size.height < 500) { self.constant = iPhone3_5_Constant; } } @end


Swift 3 versión de la solución de Pavel Alexeev. En Swift no puede usar las propiedades almacenadas en extensiones, por lo que lo aplicamos directamente a la propiedad constant .

extension NSLayoutConstraint { //We use a simple inspectable to allow us to set a value for iphone 4. @IBInspectable var iPhone4_Constant: CGFloat { set{ //Only apply value to iphone 4 devices. if (UIScreen.mainScreen().bounds.size.height < 500) { self.constant = newValue; } } get { return self.constant; } } }


Un enfoque que solo me funcionó fue usar las mismas restricciones para todas las clases de tamaño compacto, pero usar una combinación de una restricción mayor y igual a la de las prioridades para modificar la posición de las vistas en la pantalla más pequeña del iPhone 4.

Tengo una restricción entre la parte superior de una vista del teclado numérico y su supervisión que está configurada para ser mayor o igual a 160 (con una prioridad de 1000) y una restricción entre la parte inferior de la vista del teclado y la parte inferior de la vista supervisión que se establece en una constante de 30 (pero con una prioridad más baja de 750).

Esto significa que en el iPhone 4, donde no hay espacio suficiente para más de 160 puntos por encima del teclado y 30 puntos por debajo, es el espacio a continuación.

Si bien este enfoque puede no funcionar en todos los casos, lo aliento a que piense si hay un conjunto de prioridades que permitirán que sus vistas se ajusten de la manera que desee en la pantalla más pequeña.