una semana salga sale remedios rapido que productos para naturalmente lampiño hago hacer donde crema crecer como caseros barba ios interface-builder uilabel sizetofit

ios - semana - Haga crecer la fuente junto con UILabel(redimensionado por Auto Layout)-¿Cómo hacerlo en Interface Builder?



hacer crecer barba lampiño (5)

La fuente no crecerá automáticamente.
Debe aumentarlo / disminuirlo usted mismo, en IB o mediante programación.

En una aplicación de iPhone simple, UIView un mosaico de letras ( UIView personalizado con una imagen y 2 etiquetas) con el siguiente código en viewDidLoad :

DraggedTile *tile = [[[NSBundle mainBundle] loadNibNamed:@"DraggedTile" owner:self options:nil] firstObject]; tile.frame = CGRectMake(10 + arc4random_uniform(100), 10 + arc4random_uniform(100), kWidth, kHeight); [self.view addSubview:tile];

Esto funciona bien, pero me gustaría hacer que el mosaico de letras crezca, cuando suministre parámetros de ancho y alto más grandes al CGRectMake .

Así que en Xcode 5.1 Interface Builder abro el DraggedTile.xib y DraggedTile.xib "Auto Layout".

Luego, para la image y la letter agrego restricciones a los bordes izquierdo, superior, derecho, inferior del padre.

Para la etiqueta de la letter también puse "Líneas" en 0 y "Prioridad de resistencia de compresión de contenido" en 1000 (aquí en pantalla completa 1 y pantalla completa 2 ):

Luego modifico el código para usar mayor ancho y alto:

tile.frame = CGRectMake(10 + arc4random_uniform(100), 10 + arc4random_uniform(100), 2 * kWidth, 2 * kHeight);

Aquí está el resultado:

Tanto la image fondo como la etiqueta de la letter parecen haber crecido según lo previsto.

Sin embargo, el tamaño de fuente de la etiqueta no ha crecido.

He buscado y creo que necesito algo como tile.letter.adjustsFontSizeToFitWidth = YES . Pero al mismo tiempo no puedo usarlo con "Auto Layout" activado ...

¿Entonces mi pregunta es si hay alguna opción en el "Generador de Interfaz" disponible para hacer que el tamaño de la fuente también crezca?

ACTUALIZAR:

He intentado la sugerencia de ismailgulek para establecer el tamaño de fuente en 200 en Interface Builder y viewDidLoad tile.letter.adjustsFontSizeToFitWidth = YES y parece prometedor (aquí en fullscreen ):

pero ahora tengo el problema de haber establecido 40px como la restricción letter.bottom en Interface Builder. ¿Pero qué pasa si necesito un marco de baldosas más grande? ¿Hay una manera de usar el porcentaje en lugar del valor absoluto de píxeles en esa restricción?

Y otra pregunta es si es posible configurar el adjustsFontSizeToFitWidth en algún lugar del Interface Builder o ¿tengo que usar el código fuente para eso? He intentado agregar una clave a los "Atributos de tiempo de ejecución definidos por el usuario", pero luego la aplicación se bloquea en el tiempo de ejecución:


Para aquellos que vienen aquí por el título y necesitan una solución simple (después de horas de investigación):

Ejemplo de problema: si usa el diseño automático y configura la altura de UILabel para que sea proporcional a la altura de la pantalla, obtendrá un marco que es bajo para iPhone (horizontal) y alto para iPad. ¿Cómo ajustar la altura de la fuente automáticamente?

Solución: en Interface Builder,

  1. Establezca "Autoshrink" en "Tamaño de fuente mínimo" y establezca algo para el tamaño (afecta a los textos demasiado anchos, pero es necesario para nuestra solución).
  2. Establezca "Líneas" en 0 , y haga que el tamaño de la fuente sea más alto que el marco que obtendrá en el iPad .

Esto hará que la fuente se incremente automáticamente a la altura actual.


Puede reemplazar la clase en Interface Builder con su propia clase derivada y cambiar el tamaño allí.

Ejemplo:

/** MYLabel does exactly the same like UILabel, except that the font size will automatically shrink if the code is executed on an iPhone. */ class MYLabel: UILabel { var onlyOnceToken: dispatch_once_t = 0 override func drawRect(rect: CGRect) { dispatch_once(&onlyOnceToken) { if let usedFont:UIFont = self.font { // define your reference size here let iPadHeight:CGFloat = 768 let screenBounds = UIScreen.mainScreen().bounds let scale:CGFloat = screenBounds.height / iPadHeight self.font = UIFont(name: usedFont.fontName, size: CGFloat(usedFont.pointSize) * scale) } } super.drawRect(rect) } }

A partir de ahora, solo debe reemplazar la clase UILabel con MYLabel en el inspector de identidad de IB y todas sus fuentes se redimensionarán automáticamente proporcionalmente a la altura de sus dispositivos.

Si solo quieres crecer junto con el tamaño de la etiqueta, reemplaza

let screenBounds = UIScreen.mainScreen().bounds

con

let screenBounds = self.bounds.height

o cualquier otra fórmula a escala personalizada. UIFont le ofrece propiedades de medición adicionales que puede hacer mucho con este enfoque.


Puedes lograr lo que quieras configurando Autoshrink en tu guión gráfico. Esto hará que la etiqueta se reduzca a una escala mínima / tamaño explícito cuando el tamaño de la pantalla sea más pequeño. Haz que funcione en el tamaño de pantalla más grande y luego asegúrate de que se reduzca al tamaño que deseas en la vista previa del guión gráfico.


adjustsFontSizeToFitWidth propiedad de UILabel no aumentará el tamaño de la fuente, solo se reducirá de acuerdo con la documentación: Normalmente, el texto de la etiqueta se dibuja con la font que especifique en la propiedad de la fuente. Sin embargo, si esta propiedad se establece en YES y el texto en la propiedad de texto excede el rectángulo delimitador de la etiqueta, el receptor comienza a reducir el tamaño de la fuente hasta que la cadena se ajuste o se alcance el tamaño de fuente mínimo.

Pero si establece el tamaño de fuente lo suficientemente grande (por ejemplo, 200) y ajusta el adjustsFontSizeToFitWidth en YES , creo que obtendría resultados interesantes y valiosos.

Y no olvide establecer la Baseline como Align Centers , de lo contrario, es posible que su texto no se vea correctamente.

Por favor infórmenos sobre sus resultados.