Eu quero exibir uma imagem ao lado de um UILabel, no entanto, o UILabel tem um comprimento de texto variável, portanto não sei onde colocar a imagem. Como posso fazer isso?
142
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:yourLabel.lineBreakMode];
Para que serve [[NSString sizeWithFont: forWidth: lineBreakMode:]?
esta pergunta pode ter sua resposta, funcionou para mim.
Para 2014, editei nesta nova versão, com base no comentário extremamente útil de Norbert abaixo! Isso faz tudo. Felicidades
// yourLabel is your UILabel.
float widthIs =
[self.yourLabel.text
boundingRectWithSize:self.yourLabel.frame.size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{ NSFontAttributeName:self.yourLabel.font }
context:nil]
.size.width;
NSLog(@"the width of yourLabel is %f", widthIs);
[yourString boundingRectWithSize:maximumLabelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:yourLabel.font } context:nil];
self.yourLabel.intrinsicContentSize
Isso fornecerá o tamanho do conteúdo do rótulo, para que você possa obter a largura a partir daí.yourLabel.intrinsicContentSize.width
funciona muito bem, verifique a resposta abaixo.yourLabel.intrinsicContentSize.width
para Objective-C / Swiftfonte
Em rápido
fonte
A resposta selecionada está correta para o iOS 6 e abaixo.
No iOS 7,
sizeWithFont:constrainedToSize:lineBreakMode:
foi preterido . Agora é recomendado que você useboundingRectWithSize:options:attributes:context:
.Observe que o valor de retorno
CGRect
não é umCGSize
. Espero que isso ajude as pessoas que o usam no iOS 7.fonte
No iOS8 sizeWithFont foi descontinuado, consulte
Você pode adicionar todos os atributos desejados em sizeWithAttributes. Outros atributos que você pode definir:
e assim por diante. Mas provavelmente você não precisará dos outros
fonte
Swift 4 Answer que está usando a restrição
Swift 5 Answer que está usando a restrição
fonte
fonte
Aqui está uma coisa que eu inventei depois de aplicar alguns princípios em outras postagens da SO, incluindo o link de Aaron:
Neste exemplo, estou adicionando um alfinete personalizado a uma classe MKAnnotation que redimensiona um UILabel de acordo com o tamanho do texto. Ele também adiciona uma imagem no lado esquerdo da visualização, para que você veja parte do código gerenciando o espaçamento adequado para lidar com a imagem e o preenchimento.
A chave é usar
CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
e redefinir as dimensões da vista. Você pode aplicar essa lógica a qualquer visualização.Embora a resposta de Aaron funcione para alguns, não funcionou para mim. Esta é uma explicação muito mais detalhada que você deve tentar imediatamente antes de ir para outro lugar, se desejar uma visualização mais dinâmica com uma imagem e um UILabel redimensionável. Eu já fiz todo o trabalho para você !!
fonte