UIButton alinhamento vertical de fonte personalizada
Eu tenho um UIButtonque usa uma fonte personalizada, que é definida quando minha visualização é carregada:
O problema que tenho é que a fonte parece flutuar acima da linha central. Se eu comentar esta linha, a fonte padrão aparecerá bem centralizada verticalmente. Mas mudar para a fonte personalizada quebra o alinhamento vertical.
Estou tendo o mesmo problema em uma célula de tabela com uma fonte personalizada também.
Preciso informar à visualização em algum lugar que a fonte personalizada não é tão alta quanto as outras fontes?
EDIT: Acabei de perceber que a fonte que estou usando é uma fonte TrueType do Windows. Posso usá-lo bem no TextEdit no Mac, apenas um problema com o alinhamento do meu aplicativo
Estou tendo o mesmo problema com esta fonte (.otf, não .ttf): fontsquirrel.com/fonts/bebas-neue
Um problema semelhante foi discutido em Fonte instalada personalizada não exibida corretamente no UILabel . Não houve solução dada.
Aqui está a solução que funcionou para minha fonte personalizada que tinha o mesmo problema em UILabel, UIButton e outros. O problema com a fonte acabou sendo o fato de que sua propriedade ascender era muito pequena em comparação com o valor das fontes do sistema. Ascender é um espaço em branco vertical acima dos caracteres da fonte. Para corrigir sua fonte, você terá que baixar os utilitários de linha de comando do Apple Font Tool Suite . Em seguida, pegue sua fonte e faça o seguinte:
Isso vai criar Bold.hhea.xml. Abra-o com um editor de texto e aumente o valor do ascenderatributo. Você terá que experimentar um pouco para descobrir o valor exato que funciona melhor para você. No meu caso, mudei de 750 para 1200. Em seguida, execute o utilitário novamente com a seguinte linha de comando para mesclar suas alterações de volta no arquivo ttf:
Em seguida, basta usar a fonte ttf resultante em seu aplicativo.
O Apple Font Tool Suite Installer não funciona mais no OSX El Capitan por causa do SIP porque ele tenta instalar os arquivos binários em um diretório protegido. Você tem que extrair manualmente ftxdumperfuser. Primeiro copie o pacote do dmg para um diretório local, depois descompacte o OS X Font Tools.pkgcom
Agora navegue para a pasta fontTools.pkgcom
Extraia carga útil com
Agora o ftxdumperfuserbinário está em sua pasta atual. Você pode movê-lo para /usr/local/bin/para que possa usá-lo em todas as pastas dentro do aplicativo de terminal com o seguinte.
— kolyuchiy
+1 Ótima dica! Aqui estão algumas informações sobre Ascenders e Descenders typophile.com/node/13081
— tidwall
Funcionou igualmente bem para arquivos OTF.
— marper
Se você usar uma fonte personalizada modificada com esta solução, e definir o texto, ou seja, em um UITextView com várias linhas, a distância entre linhas se torna muito grande.
Descobri que no iOS 7 beta 6, eles corrigiram o problema de alinhamento de fontes. Então, se você fizer esta correção, será bom no iOS 6, mas quebrado no iOS 7 .... 7 ainda está em beta, então quem sabe
As ferramentas de fontes foram atualizadas para o Xcode 9 e instalam bem no High Sierra. Link direto: developer.apple.com/download/more/?=font
— Andrés Pizá Bückmann
Resolvi o problema ajustando a inserção do conteúdo principal (não o título!).
Por exemplo: button.contentEdgeInsets = UIEdgeInsetsMake (10.0, 0.0, 0.0, 0.0);
— Jordi Corominas
Esta foi uma boa solução rápida para mim que parecia mais simples do que tentar editar a fonte. myButton.titleLabel.font = [UIFont fontWithName: @ "FontName" size: 20.0]; myButton.contentEdgeInsets = UIEdgeInsetsMake (3.0, 0.0, 0.0, 0.0);
— Jamie Hamick
Brilhante! Obrigado! Meu problema era um pouco diferente, eu tinha botões + e - simples usando a fonte padrão e eles pareciam mais baixos do que centralizados, consegui usar a solução aqui para aumentar um pouco o texto para que não parecesse estranho.
— Patrick T Nelson
Não tenho certeza se isso vai ajudar, pois pode depender da sua fonte, mas pode ser que sua linha de base esteja desalinhada.
Funciona muito bem em um titleLabel para um UIButton quando o tamanho da fonte está sendo ajustado com minimumScaleFactor
— smitt04
Acho que essa é a melhor resposta. sem brincar com ascender, numberOfHMetrics etc ... apenas importar-exportar pelo aplicativo Glyphs e Job done. Graças a esta resposta: https://stackoverflow.com/a/16798036/1207684
— dólar 2048
— Aleš Oskar Kocur
Meu também! Obrigado senhor.
— Juan Sagasti
Você pode tentar isso no Interface Builder. Aqui está um resumo de como fazer isso -
Como você pode ver, tentar fazer isso no IB tem seus próprios benefícios.
Essa configuração já está definida e no IB a fonte é exibida verticalmente, mas é exibida como a fonte padrão. É apenas quando eu executo meu aplicativo que minha fonte personalizada aparece, e não está centralizada verticalmente
você define sua "fonte personalizada" no IB? é compatível com fontes iOS?
A fonte é definida em IB, e também pelo código especificado na minha postagem original. Na verdade, não aparece na maquete de tela do IB, embora apareça na lista suspensa de seleção de fonte no IB.
Atrasado para a festa, mas como esse problema me atingiu pela enésima vez, pensei em postar a solução mais simples que encontrei: usando Python FontTools .
Instale o Python 3 se não estiver disponível em seu sistema.
Instale FontTools
FontTools inclui uma ferramenta TTX que permite a conversão de e para XML.
Converta sua fonte para .ttx na mesma pasta
ttx myFontFile.otf
Faça as edições necessárias em .ttx e exclua o arquivo .otf, pois ele será substituído na próxima etapa.
Converta o arquivo de volta para .otf
ttx myFontFile.ttx
Motivação: A solução de kolyuchi está incompleta e, mesmo com esse fluxo de instalação estendido , a execução ftxdumperfuserresultou em um erro no 10.15.2 Catalina.