Eu estou tentando calcular a altura de um UILabel com base em diferentes comprimentos de seqüência de caracteres.
func calculateContentHeight() -> CGFloat{
var maxLabelSize: CGSize = CGSizeMake(frame.size.width - 48, CGFloat(9999))
var contentNSString = contentText as NSString
var expectedLabelSize = contentNSString.boundingRectWithSize(maxLabelSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(16.0)], context: nil)
print("\(expectedLabelSize)")
return expectedLabelSize.size.height
}
Acima está a função atual que uso para determinar a altura, mas ela não está funcionando. Eu apreciaria muito qualquer ajuda que eu possa obter. Eu preferiria a resposta em Swift e não no objetivo C.
Respostas:
Use uma extensão em
String
Swift 3
e também em
NSAttributedString
(que é muito útil às vezes)Swift 4
Apenas mude o valor para
attributes
nosextension String
métodosde
para
fonte
[NSFontAttributeName: font, NSLineBreakMode: .ByWordWrapping]
, mas não funcionouNSParagraphStyleAttributeName : style
onde o estilo é NSMutableParagraphStylesizeForItemAtIndexPath
numUICollectionView
é que parece substituir a troca deinsetForSectionAt
Para texto com várias linhas, esta resposta não está funcionando corretamente. Você pode criar uma extensão String diferente usando UILabel
O UILabel obtém uma largura fixa e o .numberOfLines é definido como 0. Ao adicionar o texto e chamar .sizeToFit (), ele se ajusta automaticamente à altura correta.
O código está escrito em Swift 3 🔶🐦
fonte
sizeToFit
Heres uma solução simples que está funcionando para mim ... semelhante a alguns dos outros postados, mas não inclui a necessidade de chamar
sizeToFit
Observe que isso está escrito no Swift 5
Isso lida com quebra de linha e tal. Não é o código mais elegante, mas faz o trabalho.
fonte
fonte
Esta é a minha resposta no Swift 4.1 e no Xcode 9.4.1
Agora você chama essa função
fonte
Descobri que a resposta aceita funcionava para uma largura fixa, mas não para uma altura fixa. Para uma altura fixa, apenas aumentaria a largura para caber tudo em uma linha, a menos que houvesse uma quebra de linha no texto.
A função width chama a função height várias vezes, mas é um cálculo rápido e não notei problemas de desempenho usando a função nas linhas de uma UITable.
fonte
minimumTextWrapWidth:CGFloat
?Verifique a altura do texto da etiqueta e ela está funcionando nela
fonte
Esta solução ajudará a calcular a altura e a largura no tempo de execução.
Aqui você pode calcular a altura estimada que sua string levaria e passá-la para o quadro UILabel.
fonte
Swift 5:
Se você tem UILabel e, de alguma forma, boundingRect não está funcionando para você (eu enfrentei esse problema. Ele sempre retornava 1 linha de altura.), Há uma extensão para calcular facilmente o tamanho da etiqueta.
Você pode usá-lo assim:
Funciona para mim
fonte
fonte