Como posso modificar a lacuna entre as linhas (espaçamento entre linhas) em uma multilinha UILabel
?
fonte
Como posso modificar a lacuna entre as linhas (espaçamento entre linhas) em uma multilinha UILabel
?
Edit: Evidentemente NSAttributedString
vai fazer isso, no iOS 6 e posterior. Em vez de usar um NSString
para definir o texto do rótulo, crie um NSAttributedString
, defina atributos nele e, em seguida, defina-o como .attributedText
no rótulo. O código que você deseja será mais ou menos assim:
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"Sample text"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:24];
[attrString addAttribute:NSParagraphStyleAttributeName
value:style
range:NSMakeRange(0, strLength)];
uiLabel.attributedText = attrString;
Old attributedStringWithString de NSAttributedString fez a mesma coisa, mas agora que está sendo preterido.
Por razões históricas, aqui está minha resposta original:
Resposta curta: você não pode. Para alterar o espaçamento entre as linhas de texto, você terá que criar uma subclasse UILabel
e drawTextInRect
criar seu próprio , criar vários rótulos ou usar uma fonte diferente (talvez uma editada para uma altura de linha específica, veja a resposta de Phillipe).
Resposta longa: no mundo impresso e online, o espaço entre as linhas do texto é conhecido como "líder" (rima com 'cabeçalho' e vem do metal de chumbo usado décadas atrás). Leading é uma propriedade somente leitura de UIFont
, que foi descontinuada no 4.0 e substituída por lineHeight
. Até onde eu sei, não há como criar uma fonte com um conjunto específico de parâmetros, como lineHeight
; você obtém as fontes do sistema e qualquer fonte personalizada que adicionar, mas não pode ajustá-las depois de instaladas.
Também não há parâmetro de espaçamento em UILabel
.
Não estou particularmente feliz com UILabel
o comportamento de, então, sugiro escrever sua própria subclasse ou usar uma biblioteca de terceiros. Isso tornará o comportamento independente da escolha da fonte e será a solução mais reutilizável.
Eu gostaria que foi mais flexibilidade na UILabel
, e eu ficaria feliz em estar errado comprovada!
A partir do iOS 6, você pode definir uma string atribuída no UILabel:
fonte
AttributedString
desabilita, por exemplo, o alinhamento do texto do rótulo, então você tem que adicioná-lo ao estilo de parágrafo.Você pode controlar o espaçamento entre linhas no storyboard:
pergunta duplicada
fonte
Do Interface Builder:
Programaticamente:
SWift 4
Usando extensão de rótulo
Agora chame a função de extensão
Ou usando a instância do rótulo (basta copiar e executar este código para ver o resultado)
Swift 3
fonte
Minha solução foi corrigir o próprio arquivo de fonte e fixar definitivamente a altura da linha. http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/
Tive que modificar 'lineGap', 'ascender', 'descender' no bloco 'hhea' (como no exemplo do blog).
fonte
Esse cara criou uma classe para obter a altura da linha (sem usar CoreText, como biblioteca MTLabel): https://github.com/LemonCake/MSLabel
fonte
A melhor coisa que encontrei é: https://github.com/mattt/TTTAttributedLabel
É uma subclasse UILabel, então você pode simplesmente inseri-la e, em seguida, alterar a altura da linha:
fonte
Encontrei bibliotecas de terceiros como esta:
https://github.com/Tuszy/MTLabel
Para ser a solução mais fácil.
fonte
Aqui está um código rápido para você definir o espaçamento de linha de forma programática
fonte
Claro, a resposta de Mike não funciona se você passar a string programaticamente. Neste caso você precisa passar uma string atribuída e mudar seu estilo.
fonte