ios - UIButton alineación vertical de fuente personalizada
objective-c fonts (6)
Creo que esta es la mejor respuesta. no jugar con ascender, numberOfHMetrics, etc ... solo importar-exportar mediante la aplicación Glyphs y Job hecho. Gracias a esta respuesta: https://stackoverflow.com/a/16798036/1207684
Tengo un UIButton
que usa una fuente personalizada, que se establece cuando se carga mi vista:
- (void)viewDidLoad
{
[super viewDidLoad];
self.searchButton.titleLabel.font = [UIFont fontWithName: @"FONTNAME" size: 15.0 ];
}
El problema que tengo es que la fuente parece flotar hacia arriba de la línea central. Si hago un comentario sobre esta línea, la fuente predeterminada aparece verticalmente centrada. Pero cambiar a la fuente personalizada rompe la alineación vertical.
Estoy recibiendo el mismo problema en una celda de tabla con una fuente personalizada también.
¿Debo decirle a la vista que la fuente personalizada no es tan alta como otras fuentes?
EDITAR: Me acabo de dar cuenta de que la fuente que estoy usando es una fuente TrueType de Windows. Puedo usarlo bien en TextEdit en la Mac, solo un problema con la alineación en mi aplicación
No estoy seguro si esto ayudará, ya que puede depender de su fuente, pero podría ser que su línea base no esté alineada.
self.searchButton.titleLabel.baselineAdjustment =
UIBaselineAdjustmentAlignCenters;
Por lo tanto, no hay una respuesta real a esto, aparte de editar el archivo de fuente. Que no sé cómo hacer y no tenía tiempo, así que reduje el tamaño de las imágenes y ajusté la celda para que pareciera que estaba alineada correctamente.
Creo que es un truco sucio, pero funciona y está bien.
Esta fue la única fuente que causó un problema, por lo que el problema debe ser con el archivo de fuente.
En realidad, no fui yo quien concluyó esto, sino que fue otra publicación de SO, pero no puedo encontrarla en ningún lado. Si la encuentro nuevamente, la incluiré en los comentarios.
Puedes probar esto en Interface Builder. Aquí hay una instantánea de cómo hacerlo -
Como puede ver, tratar de hacer esto en IB tiene sus propios beneficios.
Resolví el problema ajustando el contenido superior (¡no el título!).
Por ejemplo: button.contentEdgeInsets = UIEdgeInsetsMake (10.0, 0.0, 0.0, 0.0);
¡Buena suerte!
Se debatió un problema similar en la fuente instalada personalizada que no se muestra correctamente en UILabel . No hubo solución dada.
Aquí está la solución que funcionaba para mi fuente personalizada que tenía el mismo problema en UILabel, UIButton y tal. El problema con la fuente resultó ser el hecho de que su propiedad ascendente era demasiado pequeña en comparación con el valor de las fuentes del sistema. Ascender es un espacio en blanco vertical sobre los caracteres de la fuente. Para arreglar su fuente, deberá descargar las utilidades de línea de comandos de Apple Font Tool Suite . Luego toma tu fuente y haz lo siguiente:
~$ ftxdumperfuser -t hhea -A d Bold.ttf
Esto creará Bold.hhea.xml
. Ábralo con un editor de texto y aumente el valor del atributo ascender
. Tendrás que experimentar un poco para descubrir el valor exacto que funcione mejor para ti. En mi caso, lo cambié de 750 a 1200. Luego, ejecute la utilidad nuevamente con la siguiente línea de comando para fusionar los cambios en el archivo ttf:
~$ ftxdumperfuser -t hhea -A f Bold.ttf
A continuación, utilice la fuente ttf resultante en su aplicación.
OS X El Capitan
El instalador de Apple Font Tool Suite ya no funciona en OSX El Capitan debido a SIP porque intenta instalar los archivos binarios en un directorio protegido. Tienes que extraer ftxdumperfuser
manualmente. Primero copie el paquete de dmg en un directorio local y luego desempaquete OS X Font Tools.pkg
con
~$ xar -xf OS/ X/ Font/ Tools.pkg
Ahora navegue a la carpeta fontTools.pkg
con
~$ cd fontTools.pkg/
Extraer la carga útil con
~$ cat Payload | gunzip -dc | cpio -i
Ahora el binario ftxdumperfuser
está en su carpeta actual. Puede moverlo a /usr/local/bin/
para que pueda usarlo en cada carpeta dentro de la aplicación del terminal con lo siguiente.
~$ mv ftxdumperfuser /usr/local/bin/