2011-10-19 25 views
7

Uso del iOS 5 SDK Estoy escribiendo una aplicación que utiliza una fuente de estilo de script personalizada en su instancia de UINavigationBar. El problema con esta fuente es que, dado que está en el estilo de script, sus glifos exceden los límites. Se puede ver el problema en la aplicación aquí:Etiqueta de título de corte en UINavigationBar en iOS 5

Example image on a device

Para un ejemplo más claro, se puede ver mi documento photoshop aquí:

Photoshop example

alguna idea de cómo podría solucionar este problema? Mi primer instinto fue establecer la propiedad clipsToBounds de UILabel en UINavigationBar, pero aparentemente no hay una forma aprobada de Apple para acceder a este objeto directamente. Esto me ha molestado durante algún tiempo mientras usaba iOS 5 en versión beta, por lo que quizás pueda ayudar ahora que la NDA se ha eliminado.

Gracias!

+0

¿Has descubierto esto? Tengo exactamente el mismo problema. – danbretl

+0

Bueno, envié un boleto a Apple, y después de un tiempo regresaron con "UILabel realmente no puede hacer lo que estás preguntando", por alguna razón técnica. Realmente no he encontrado una solución alternativa, y decidí cambiar el diseño de este proyecto por otras razones que hacen que este tema sea irrelevante. ¡Lo siento! – maxluzuriaga

+0

No hay problema. Gracias por la actualización. Si encuentro una solución confiable, publicaré una respuesta. No me está afectando demasiado la mayor parte del tiempo, así que no estoy invirtiendo mucho tiempo en eso en este momento. – danbretl

Respuesta

0

Si está utilizando un controlador de navegación, puede establecer la vista de título de un determinado UIViewController que se está visualizando. Esta vista de título puede ser un UIImageView con el título como un recurso .png.

Por ejemplo:

Dentro de su UIViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
      self.navigationController.navigationItem.titleView = [[UIImageView alloc] initWithImage:@"yourheader.png"]; 
    } 

    return self; 
} 

Puede jugar un poco con el tamaño de la imagen para que se ajuste correctamente.

Espero que esto te pueda ayudar.

+2

Soy consciente de esto, pero en mi aplicación, el título debe cambiar para cada nuevo controlador de vista, incluido el cambio dinámico en función de la entrada del usuario, por lo que una solución estática como esta no funcionaría. – maxluzuriaga

0

¿Se puede acceder al clipToBounds o se ajusta la propiedadFontSizeToFitWidth del UILabel?

Alternativamente, podría elegir un tamaño de letra que hiciera que la etiqueta se aletara en la vista de UILabel. Dispone de una descripción sobre cómo ajustar el tamaño de fuente a un rect dada aquí:

How to adjust font size of label to fit the rectangle?

1

usted podría utilizar UINavigationItem 's titleView para establecer un UILabel con una fuente personalizada, y luego anular setTitle: para actualizar su encargo etiqueta. Si es necesario, puede llamar al sizeToFit en la etiqueta o actualizar manualmente su marco después de usar sizeWithFont: o cualquiera de los otros métodos de dimensionamiento NSString.

1

Tuve exactamente el mismo problema y parece que no puedo encontrar ninguna solución reciente sobre el tema.

Aquí está un artículo que encontré aunque con una gran explicación del problema: https://web.archive.org/web/20161228102731/http://tinymission.com/post/subclassing-uibutton

El autor de este artículo dice:

Ves, Apple (o quien diseñó la clase UIButton) decidió autocalcule el ancho de la etiqueta del botón según el ancho informado de las letras de la fuente. ... El problema surge principalmente con fuentes cursivas y cursivas. ... La forma en que anidan es que el diseñador de fuentes realmente dibuja la carta intencionalmente fuera de sus límites calculados. Esto permite que dos letras cursivas toquen y que otros estilos de letras estén más juntos, de modo que una letra como 'f' no se ve anormalmente lejos de la letra 't'.

Espero que esto ayude a cualquier persona en el futuro que tropiece con este mensaje con el mismo problema.

Cuestiones relacionadas