Eu adicionei uma etiqueta em meu arquivo de ponta, então é necessário ter alinhamento superior esquerdo para essa etiqueta. Como estou fornecendo texto em tempo de execução, não tenho certeza de quantas linhas existem. Portanto, se o texto contém apenas uma linha, ele aparece alinhado com o centro vertical. Esse alinhamento não coincide com a minha respectiva etiqueta na frente dele.
Por exemplo:
Que parece estranho :(
Existe alguma maneira de definir o texto do rótulo adequado ao alinhamento superior esquerdo?
Respostas:
Em vez de reexplicar, farei um link para esta pergunta / resposta bastante extensa e bem avaliada:
Alinhar o texto verticalmente para cima em um UILabel
A resposta curta é não, a Apple não tornou isso fácil, mas é possível alterando o tamanho do quadro.
fonte
É bastante fácil de fazer. Crie uma
UILabel
subcasse com umaverticalAlignment
propriedade e substituatextRectForBounds:limitedToNumberOfLines
para retornar os limites corretos para um alinhamento vertical superior, médio ou inferior. Aqui está o código:SOLabel.h
SOLabel.m
fonte
bounds.size.width
vez derect.size.width
emtextRectForBounds:limitedToNumberOfLines:
parece consertar isso.Eu encontrei uma solução usando AutoLayout no StoryBoard.
1) Defina o número de linhas como 0 e o alinhamento do texto como Esquerda.
2) Defina a restrição de altura.
3) A restrição de altura deve estar em relação - menor ou igual
4)
Obtive o resultado da seguinte forma:
fonte
viewWillLayoutSubviews
no controlador ou no arquivo da célula? Se for o controlador, como ele acessa o UILabel da célula?O SOLabel funciona para mim.
Swift 3 e 5:
Esta versão foi atualizada a partir do original para permitir suporte para idiomas RTL:
Swift 1:
fonte
No meu caso, foi uma
bottom space
questão de restrição. Eu tinha definido como= 16
.Quando o configurei como
bottom to >= 16
, esse problema foi resolvido.Além disso, se houver alguma restrição de altura no rótulo, será necessário removê-la.
Esta é a visualização de restrição do meu rótulo no inspetor de tamanho:
fonte
Em seu código
Esteja ciente de que, se você usar isso em células de tabela ou outras visualizações que são recicladas com dados diferentes, você precisará armazenar o quadro original em algum lugar e redefini-lo antes de chamar sizeToFit.
fonte
Encontrei outra solução para o mesmo problema. Usei em
UITextView
vez deUILabel
e mudei aeditable()
função parafalse
.fonte
Eu também estava tendo esse problema, mas o que descobri foi que a ordem em que você define as propriedades e métodos do UILabel é importante!
Se você chamar
[label sizeToFit]
anteslabel.font = [UIFont fontWithName:@"Helvetica" size:14];
, o texto não se alinha ao topo, mas se você trocá-los, então ele se alinha!Também percebi que definir o texto primeiro também faz diferença.
Espero que isto ajude.
fonte
Como você está usando o construtor de interface, defina as restrições para sua etiqueta (certifique-se de definir a altura e a largura também). Em seguida, no Inspetor de tamanho, verifique a altura da etiqueta. Lá você vai querer ler> = em vez de =. Então, na implementação desse controlador de visualização, defina o número de linhas como 0 (também pode ser feito em IB) e defina o rótulo [label sizeToFit]; e à medida que o texto ganha comprimento, o rótulo aumenta de altura e mantém o texto no canto superior esquerdo.
fonte
Se você precisa de um texto não editável que, por padrão, começa no canto superior esquerdo, você pode simplesmente usar uma Visualização de Texto em vez de um rótulo e definir seu estado como não editável, assim:
Muito mais fácil do que mexer com os rótulos ...
Felicidades!
fonte
Solução com SoLabel funciona, obrigado.
Abaixo, adicionei a versão monotouch:
fonte
A maneira mais simples e fácil é incorporar Label no StackView e definir o eixo do StackView como Horizontal, Alignment to Top no Attribute Inspector do Storyboard, como mostrado aqui .
fonte
Com base na resposta incrível do totiG, criei uma classe IBDesignable que torna extremamente fácil personalizar o alinhamento vertical de um UILabel direto do StoryBoard. Apenas certifique-se de definir sua classe UILabel como 'VerticalAlignLabel' no inspetor de identidade do StoryBoard. Se o alinhamento vertical não tiver efeito, vá para Editor-> Atualizar todas as visualizações que deve resolver o problema.
Como funciona: depois de definir a classe do UILabel corretamente, o storyboard deve mostrar um campo de entrada que leva um inteiro (código de alinhamento).
Atualização: adicionei suporte para rótulos centralizados ~ Sev
Insira 0 para Alinhamento Superior
Insira 1 para Alinhamento do Meio
Digite 2 para alinhamento inferior
fonte
você também pode apenas alterar seu UILabel para UITextView, porque eles basicamente fazem a mesma coisa, exceto que a vantagem de UITextView é que o texto é alinhado automaticamente no canto superior esquerdo
fonte
Eu tenho esse problema, mas meu rótulo estava em UITableViewCell, e no fundo que a maneira mais fácil de resolver o problema era criar um UIView vazio e definir o rótulo dentro dele com restrições para cima e apenas para o lado esquerdo, em off maldito defina o número de linhas para 0
fonte
Para iOS 7, foi isso que fiz e trabalhei para mim
fonte
Swift 2.0:: Usando a extensão UILabel
Crie valores enum constantes em um arquivo Swift vazio.
Usando a extensão UILabel:
Faça uma classe Swift vazia e nomeie-a. Adicione o seguinte.
Uso:
fonte
sampleLabel: UILabel?
?Versão Swift 3 da resposta de @totiG
fonte
A resposta do @totiG está correta e resolveu meu problema. Mas eu encontrei um problema ao implementar este método, em dispositivos menores como 5s, SE, isso não funciona para mim. Eu tenho que definir
label.sizeToFit()
emoverride func layoutSubViews()
fonte
Swift 5
É simples, a ordem dos imóveis é tudo.
fonte
Como definir o alinhamento superior esquerdo para o aplicativo UILabel para iOS? Etiqueta Definir modo de conteúdo para "Superior esquerdo" é um trabalho para mim, muito obrigado:
fonte