O método UILabel sizeToFit não está funcionando corretamente
-
22-12-2019 - |
Pergunta
Estou tentando mostrar um longo pedaço de texto dentro de um UILabel em uma linha.O UILabel é uma subvisão do UIScrollView para que eu possa rolar e ver todo o UILabel.
Meu problema é que o método sizeToFit funciona apenas parcialmente.
textLabel.attributedText = attributedString;
textLabel.numberOfLines = 1;
[textLabel sizeToFit];
textScrollView.contentSize = CGSizeMake(textLabel.frame.size.width, textLabel.frame.size.height);
O tamanho do conteúdo do UIScrollView fica grande o suficiente para mostrar todo o UILable, mas para uma linha como:
então tentarei compartilhar alguns deles aqui de vez em quando."
O UILabel mostra:
então vou tentar compartilhar algumas...
O que estou fazendo de errado?
Solução
Acontece que o código está bom - mas Usar Autolayout foi marcado.Desmarque - tudo funciona perfeitamente ...
Outras dicas
Se você deseja conseguir isso com o layout automático ativado, é simples.Apenas certifique-se de adicionar numberOfLines
textLabel.adjustsFontSizeToFitWidth = YES;
textLabel.numberOfLines = 0;
Surpreendentemente, se você não restringisse a largura da etiqueta, isso funcionaria:
[textLabel.superview layoutSubviews];
Aprendi isso por tentativa e erro.
tentar
textLabel.adjustsFontSizeToFitWidth = YES;
textLabel.minimumFontScale = 0.5;
Como você restringiu seu Label para mostrar apenas uma linha de Text e truncar o restante, ele está se comportando da mesma forma
textLabel.attributedText = attributedString;
textLabel.numberOfLines = 0;
[textLabel sizeToFit];
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textScrollView.contentSize = CGSizeMake(textLabel.frame.size.width, textLabel.frame.size.height);
Espero que isso ajude você
O motivo mais comum para sizeToFit
não funcionar corretamente é o UILabel
não ter nenhuma restrição de layout automático, por exemplo, se você confiar implicitamente na posição da visualização permanecendo fixa em relação ao canto superior esquerdo.Adicionar qualquer restrição (inicial, superior, centralY, qualquer coisa) corrigirá o problema, presumivelmente porque resultará em layoutSubviews
sendo chamado em algum momento, conforme sugerido na resposta de Maxthon Chan.