É possível redimensionar automaticamente a caixa / limites do UILabel para caber no texto contido? (Não me importo se ele for maior que a tela)
Portanto, se um usuário digitar "olá" ou "meu nome for muito longo, quero que ele caiba nesta caixa", ele nunca será truncado e o rótulo será 'ampliado' adequadamente?
ios
iphone
objective-c
uilabel
Wayneh
fonte
fonte
Respostas:
Por favor, verifique minha essência onde eu fiz uma categoria para
UILabel
algo muito semelhante; minha categoria permiteUILabel
esticar sua altura para mostrar todo o conteúdo: https://gist.github.com/1005520Ou confira esta publicação: https://stackoverflow.com/a/7242981/662605
Isso aumentaria a altura, mas você pode alterá-la facilmente para trabalhar de outra maneira e aumentar a largura com algo parecido com isto, que é o que você deseja fazer:
Você poderia simplesmente usar o
sizeToFit
método disponível naUIView
classe, mas defina o número de linhas como 1 para ser seguro.atualização para iOS 6
Se você estiver usando o AutoLayout, terá uma solução integrada. Ao definir o número de linhas como 0, a estrutura redimensionará seu rótulo adequadamente (adicionando mais altura) para caber no seu texto.
atualização para iOS 8
sizeWithFont:
está obsoleto, então usesizeWithAttributes:
:fonte
A utilização
[label sizeToFit];
alcançará o mesmo resultado da categoria Daniels.Embora eu recomendo usar o layout automático e deixar o rótulo se redimensionar com base em restrições.
fonte
Se quisermos que isso
UILabel
diminua e se expanda com base no tamanho do texto, o storyboard com autolayout é a melhor opção. Abaixo estão as etapas para conseguir issoPassos
Coloque o UILabel no controlador de exibição e coloque-o onde quiser. Também colocado
0
para anumberOfLines
propriedade deUILabel
.Dê a ela restrições de pino de espaço superior, à esquerda e à direita.
Update Frame
e clique emFix Misplacement
. Agora, esse UILabel será reduzido se o texto for menor e expandido se o texto for maior.fonte
Isso não é tão complicado quanto algumas das outras respostas.
Fixar as bordas esquerda e superior
Basta usar o layout automático para adicionar restrições para fixar os lados esquerdo e superior do rótulo.
Depois disso, ele será redimensionado automaticamente.
Notas
Não é necessário definir
sizeToFit
ao usar o layout automático. Meu código completo para o projeto de exemplo está aqui:myLabel.preferredMaxLayoutWidth = 150 // or whatever
código. Também fixei meu botão na parte inferior do rótulo para que ele se movesse para baixo quando a altura do rótulo aumentasse.UITableViewCell
, consulte esta resposta .fonte
Use
[label sizeToFit];
para ajustar o texto no UILabelfonte
Criei alguns métodos com base na resposta de Daniel acima.
fonte
Aqui está o que estou encontrando funciona para a minha situação:
1) A altura do UILabel tem uma restrição> = 0 usando o layout automático. A largura é fixa. 2) Atribua o texto ao UILabel, que já possui uma superview nesse ponto (não tenho certeza da vitalidade). 3) Em seguida, faça:
A altura do rótulo está agora definida adequadamente.
fonte
Este é o método da categoria. Você deve definir o texto primeiro, depois chame esse método para ajustar a altura do UILabel.
fonte
Você pode dimensionar seu rótulo de acordo com o texto e outros controles relacionados usando duas maneiras:
Para iOS 7.0 e superior
antes do iOS 7.0, isso poderia ser usado para calcular o tamanho da etiqueta
// renomear outros controles com base em labelTextHeight
Se você não deseja calcular o tamanho do texto do rótulo, pode usar -sizeToFit na instância do UILabel como-
// depois disso, você pode fazer com que o quadro da etiqueta reformule outros controles relacionados
fonte
[label sizeToFit];
em viewDidLoadfonte
Eu tive um grande problema com o layout automático. Temos dois contêineres dentro da célula da tabela. O segundo contêiner é redimensionado, dependendo da descrição do item (0 - 1000 caracteres), e a linha deve ser redimensionada com base neles.
O ingrediente que faltava era a restrição de fundo para descrição.
Alterei a restrição inferior do elemento dinâmico de = 0 para > = 0 .
fonte
Cabe sempre! :)
fonte
você pode mostrar uma saída de linha e definir a propriedade Line = 0 e mostrar várias saídas de linha e definir a propriedade Line = 1 e mais
fonte
Há também esta abordagem:
fonte
changeTextWithAutoHeight:width:
métodoUILabel
. Você poderia fornecer um link para onde, na documentação do UIKit, esse método pode ser encontrado.