Atualmente tenho um UILabel
:
factLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 100)];
factLabel.text = @"some text some text some text some text";
factLabel.backgroundColor = [UIColor clearColor];
factLabel.lineBreakMode = UILineBreakModeWordWrap;
factLabel.numberOfLines = 10;
[self.view addSubview:factLabel];
Ao longo da vida do meu aplicativo iOS, factLabel
obtém vários valores diferentes. Alguns com frases múltiplas, outros com apenas 5 ou 6 palavras.
Como posso configurar o UILabel
modo para que o tamanho da fonte seja alterado para que o texto sempre caiba nos limites que eu defini?
ios
objective-c
fonts
uilabel
CodeGuy
fonte
fonte
Respostas:
Única linha:
O código acima ajustará o tamanho da fonte do seu texto para (por exemplo)
8
tentar ajustá-lo ao rótulo.numberOfLines = 1
é mandatório.Várias linhas:
Pois
numberOfLines > 1
existe um método para descobrir o tamanho do texto final através dos métodos de adição sizeWithFont do NSString: ... UIKit , por exemplo:Depois disso, você pode redimensionar seu rótulo usando o resultado
lLabelSize
, por exemplo (supondo que você altere apenas a altura do rótulo):iOS6
Única linha:
A partir do iOS6,
minimumFontSize
foi preterido. A linhapode ser alterado para:
iOS7
Várias linhas:
A partir do iOS7,
sizeWithFont
fica obsoleto. A caixa multilinha é reduzida para:iOS 13 (Swift 5):
fonte
sizeWithFont:constrainedToSize:lineBreakMode:
Mas desta forma é um pouco difícilmyLabel.minimumScaleFactor:10.0/[UIFont labelFontSize];
minimumFontSize
foi descontinuado com o iOS 6. Você pode usarminimumScaleFactor
.Isso cuidará do tamanho da fonte, de acordo com a largura do rótulo e do texto.
fonte
adjustsFontSizeToFitWidth
só reduz texto se ele não se encaixa dentro do recipienteCom base na resposta de @Eyal Ben Dov, convém criar uma categoria para torná-la flexível para uso em outros aplicativos seus.
Obs .: atualizei seu código para torná-lo compatível com o iOS 7
-Arquivo de cabeçalho
-Arquivo de implementação
-Uso
Felicidades
fonte
setNeedsLayout
/layoutIfNeeded
se você estiver usando o AutoLayout).Linha única - Existem duas maneiras, você pode simplesmente mudar.
1- Pragmaticamente (Swift 3)
Basta adicionar o seguinte código
2 - Usando o inspetor UILabel Attributes
fonte
É 2015. Eu tive que procurar uma postagem no blog que explicasse como fazer isso para a versão mais recente do iOS e XCode com Swift, para que funcionasse com várias linhas.
Fonte: http://beckyhansmeyer.com/2015/04/09/autoshrinking-text-in-a-multiline-uilabel/
fonte
Versão rápida:
fonte
Aqui está uma extensão do Swift para o UILabel. Ele executa um algoritmo de pesquisa binária para redimensionar a fonte com base na largura e altura dos limites do rótulo. Testado para funcionar com iOS 9 e autolayout.
USO: Onde
<label>
está o seu UILabel predefinido que precisa ser redimensionadoPor padrão, essa função pesquisa dentro dos tamanhos de fonte 5pt e 300pt e define a fonte para caber seu texto "perfeitamente" dentro dos limites (preciso em 1,0pt). Você pode definir os parâmetros para que, por exemplo, pesquise entre 1pt e o tamanho da fonte atual do rótulo com precisão dentro de 0,1pts da seguinte maneira:
Copie / cole o seguinte código no seu arquivo
NOTA: Cada uma das
layoutIfNeeded()
chamadas pode ser removida a seu critériofonte
Não é um pouco sofisticado, mas isso deve funcionar, por exemplo, digamos que você queira limitar seu rótulo uil para 120x120, com tamanho máximo de fonte 28:
fonte
Basta enviar a mensagem sizeToFit para o UITextView. Ele ajustará sua própria altura para caber apenas no texto. Não mudará sua própria largura ou origem.
fonte
sizeToFit
seu número detextViewA1
200 pontos, que acaba sendo cortado.Versão Swift 2.0:
fonte
Esta solução funciona para várias linhas:
Depois de seguir vários artigos e exigir uma função que dimensionasse automaticamente o texto e ajustasse a contagem de linhas para melhor se ajustar ao tamanho especificado da etiqueta, eu mesmo escrevi uma função. (ou seja, uma corda curta caberia muito bem em uma linha e usaria uma grande quantidade do quadro da etiqueta, enquanto uma corda forte seria dividida automaticamente em 2 ou 3 linhas e ajustaria o tamanho de acordo)
Sinta-se livre para reutilizá-lo e ajustar conforme necessário. Certifique-se de chamá-lo após a
viewDidLayoutSubviews
conclusão, para que o quadro de etiqueta inicial tenha sido definido.fonte
Aqui está o código de preenchimento de uma subclasse UILabel que implementa a alteração do tamanho da fonte animada:
fonte