É possível reduzir a diferença entre o texto, quando colocado em várias linhas em um UILabel
? Podemos definir o quadro, tamanho da fonte e número de linhas. Eu quero reduzir a diferença entre as duas linhas nesse rótulo.
objective-c
swift
xcode
uilabel
line-spacing
Abhinav
fonte
fonte
UILabel
e incorpore todos os rótulos aStackView
. Finalmente ajuste ospacing
deStackView
. Lembre-se de empilhá-los verticalmente.Respostas:
Pensei em adicionar algo novo a esta resposta, para não me sentir tão mal ... Aqui está uma resposta rápida :
"Resposta curta: você não pode. Para alterar o espaçamento entre linhas de texto, você terá que subclassificar UILabel e rolar seu próprio drawTextInRect, ou criar vários rótulos."Consulte: Definir espaçamento entre linhas do UILabel
Esta é uma resposta muito antiga e outras já adicionaram a nova e melhor maneira de lidar com isso. Consulte as respostas atualizadas fornecidas abaixo.fonte
NSAttributedString
(também disponível nas propriedades do UILable no construtor de interface do Xcode).NSParagraphStyle
uso de umNSAttributedString
. (I pode precisar de fazer mais testes das outras propriedades modifyable, mas alineSpacing
propriedade só permite aumentá-lo.)No Xcode 6, você pode fazer isso no storyboard:
fonte
A partir do iOS 6, você pode definir uma sequência atribuída ao UILabel. Verifique o seguinte:
fonte
attributedString
deve ser umNSMutableAttributedString
(NÃO NSAttributedString)NSMutableAttributedString *attributedString = [NSMutableAttributedString alloc]initWithString:@"sample text"];
lineSpacing
propriedade doNSMutableParagraphStyle
nunca é negativa; portanto, a altura da linha não pode ser reduzida com essa abordagem. Para responder à pergunta, você precisa usar outra propriedade, consulte @ d.ennis answer.As soluções indicadas aqui não funcionaram para mim. Encontrei uma maneira ligeiramente diferente de fazer isso com o iOS 6 NSAttributeString:
fonte
Eu fiz essa extensão simples que funciona muito bem para mim:
Copie isso em um arquivo, para que você possa usá-lo assim
fonte
lineSpacing
e esquece a configuraçãolineHeightMultiple
?.lineSpacing = 1.4
e esquecer tudo sobre.lineHeightMultiple
...No Interface Builder (Storyboard / XIB):
Programaticamente:
SWift 4
Usando extensão de etiqueta
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
Agora, há uma resposta alternativa no iOS 6, que é definir AtributosText no rótulo, usando um NSAttributedString com os estilos de parágrafo apropriados. Consulte esta resposta de estouro de pilha para obter detalhes sobre a altura da linha com NSAttributedString:
Texto principal - altura da linha NSAttributedString feita corretamente?
fonte
Aqui está uma classe que subclasse UILabel para ter propriedade de altura da linha: https://github.com/LemonCake/MSLabel
fonte
Em Swift e em função, inspirado no DarkDust
fonte
De acordo com a Resposta do @Mike, reduzir o
lineHeightMultiple
é o ponto principal. Exemplo abaixo, funciona bem para mim:fonte
Extensão útil do SWIFT 3 para definir espaço entre linhas com mais facilidade :)
fonte
Eu encontrei uma maneira em que você pode definir a altura real da linha (não é um fator) e até renderiza no Interface Builder . Apenas siga as instruções abaixo. O código está escrito no Swift 4 .
Etapa 1: Crie um arquivo nomeado
DesignableLabel.swift
e insira o seguinte código:Etapa 2: Coloque um
UILabel
em um Storyboard / XIB e defina sua classe comoDesignableLabel
. Aguarde a construção do seu projeto (a construção deve ser bem-sucedida!).Etapa 3: Agora você deve ver uma nova propriedade no painel de propriedades denominada "Altura da linha". Basta definir o valor desejado e você verá os resultados imediatamente!
fonte
Aqui está uma subclasse de UILabel que define
lineHeightMultiple
e garante que a altura intrínseca seja grande o suficiente para não cortar o texto.fonte
No Swift 2.0 ...
Adicione uma extensão:
Agora, basta definir seu UILabel como attributeText:
Obviamente, adicionei vários parâmetros que talvez você não precise. Brinque - sinta-se à vontade para reescrever o método - Eu estava procurando isso em várias respostas diferentes, então achei que postaria toda a extensão, caso isso ajude alguém por aí ... -rab
fonte
Swift3 - Em uma extensão UITextView ou UILabel, adicione esta função:
Adicionei algum código para manter o texto atribuído atual, se você já estiver usando cadeias atribuídas com a visualização (em vez de substituí-las).
fonte
Outra resposta ... Se você estiver passando a sequência de forma programática, precisará passar uma sequência atribuída em vez de uma sequência regular e alterar seu estilo. (IOS10)
fonte
Extensão Swift 3:
fonte
Isso deve ajudar com isso. Em seguida, você pode atribuir seu rótulo a essa classe personalizada no storyboard e usá-lo diretamente nos parâmetros:
fonte
Extensão de etiqueta Swift 4. Criando NSMutableAttributedString antes de passar para a função, caso haja atributos adicionais necessários para o texto atribuído.
fonte
Este código funcionou para mim (iOS 7 e iOS 8, com certeza).
fonte
Aqui está a minha solução rapidamente. A subclasse deve funcionar para as propriedades attributeText e text e para characterSpacing + lineSpacing. Ele mantém o espaçamento se uma nova string ou attributeString for configurada.
fonte
Como uma solução rápida, rápida, suja, inteligente e simples:
Para UILabels que não têm muitas linhas, você pode usar o stackViews.
Spacing
StackView para a quantidade desejadaEmpilhe-os verticalmente . Essa solução também funciona para fontes personalizadas.
fonte