No iOS7, existem novas APIs para obter uma fonte que é automaticamente ajustada ao tamanho do texto que o usuário definiu em suas preferências.
É algo assim para usá-lo:
UIFont *myFont = [UIFont fontWithDescriptor:[UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleHeadline] size:0];
Agora, qualquer texto que você atribuir a isso se moverá para cima e para baixo no tamanho da fonte conforme o usuário altera a configuração do tamanho do texto do sistema. (Lembre-se de ouvir a name:UIContentSizeCategoryDidChangeNotification
notificação e atualizar sua visualização para levar em conta a mudança no tamanho).
Respostas:
Nos bastidores dessa API, a apple tem algum tipo de tabela de pesquisa que retorna uma família de fonte específica, tamanho e, às vezes, características simbólicas (como negrito) que (por exemplo
UIFontTextStyleHeadline
) e o tamanho de texto preferido do usuário. O último é uma corda puxadasharedApplication
desta forma:(Eu desconectei todos os tamanhos / fontes / características padrão para Helvetica-Neue para os vários tamanhos de texto dinâmico). Desde então, adicionamos manuseio para os tamanhos de acessibilidade, o que é importante .
Portanto, tudo o que você realmente precisa fazer é construir uma tabela de pesquisa semelhante. Nosso designer criou uma planilha simples para mim:
Observe que adicionamos alguns estilos (legenda 3 e 4) para ter 8 em vez de 6 para escolher.
Então você vai querer colocá-lo em algum lugar conveniente, como uma categoria
UIFontDescriptor
. Você vai querer que seu método retorne umaUIFontDescriptor
API semelhante à da Apple, de modo que ainda seja fácil de ajustar com características simbólicas, etc.Minha categoria é parecida com esta:
UIFontDescriptor + AvenirNext.h
UIFontDescriptor + AvenirNext.m
Optamos por usar a mesma fonte base
AvenirNext-Medium
, e então negrito e tal por meio de traços simbólicos, mas você pode ficar louco e especificar diferentes variações de peso em sua fonte como parte de sua tabela de pesquisa também se quiser, comoAvenirNext-ExtraBold
.Isso é tudo que há para fazer! Nós o usamos assim:
fonte
UIContentSizeCategoryAccessibilityMedium
,UIContentSizeCategoryAccessibilityLarge
, etc.UIFont
, para que você possa usar apenas[UIFont preferredAvenirFontForTextStyle:UIFontTextStyleHeadline]
:? O tamanho é redundante no exemplo que você dá na parte inferior?É assim que faço no Swift. Gosto disso porque é mais geral, requer apenas uma tabela e deve funcionar bem com qualquer fonte. Primeiro, escrevi um multiplicador generalizado (em um getter).
Então eu atualizo a fonte (por exemplo, no observador) usando um
UIFontDescriptor
como este:fonte
No iOS 11, a
UIFontMetrics
aula foi introduzida. Crie um objeto FontMetrics para o estilo de texto no qual você está interessado. Em seguida, escolha qualquer fonte desejada, dimensionada para o tamanho de tipo dinâmico padrão. E então você pode pedir ao objeto FontMetrics para dimensionar essa fonte de acordo com as configurações atuais do usuário.fonte
Código @Bob Spryn reescrito com swift:
Uso:
fonte
let style = Static.fontSizeTable[textStyle] as! NSDictionary
ereturn UIFontDescriptor(name: SubStruct.preferredFontName as String, size: CGFloat((style[contentSize] as! NSNumber).floatValue))
Experimente isto:
Mas tenha em mente que este código é apenas uma aproximação (Dynamic Type faz muito mais do que dimensionar o tamanho da fonte).
fonte
Semelhante à abordagem de @ bill-weinman , peguei as escalas e as dividi em uma função que não depende de um determinado tamanho de fonte de 16.
Ele pode então ser usado com fontes personalizadas como esta:
fonte
No iOS 11, você pode usar:
Consulte também Criando aplicativos com tipo dinâmico WWDC 2017 - Sessão 245 - horário iOS 8:34.
fonte
Código Swift 2.1-3.0 baseado na porta do código @Bob Spryn de @ smartDonkey. Também atualizado com os tamanhos da Apple de @Klaas .
fonte
'dispatch_once_t' is unavailable in Swift: Use lazily initialized globals instead
É assim que eu atualizo a fonte de um prefferedFontForTextStyle:
fonte
Só queria pular e dizer que existe uma biblioteca para ajudar a integrar fontes personalizadas e lidar com as alterações de tamanho do Tipo Dinâmico. Ele é chamado, de forma útil, de Font ( https://github.com/adamyanalunas/Font ) e, em vez de ser uma solução mágica, cria uma estrutura para lidar com cada fonte personalizada de maneira diferente enquanto remove o clichê.
nb Eu sou o autor desta pequena biblioteca e acho que é legal.
fonte
Aqui está minha opinião sobre a resposta de @Gobe, no Swift 3:
fonte
A partir do iOS 11, você pode ajustar programaticamente fontes personalizadas configuradas no editor visual:
fonte