Resize CATextLayer para ajustar o texto no iOS

Toda a minha pesquisa até agora parece indicar que não é possível fazer isso com precisão. As duas únicas opções disponíveis para mim no início foram:

a) Usando um gerenciador de layout para o CATextLayer - não disponível no iOS a partir de 4.0

b) Use sizeWithFont: constrainedToSize: lineBreakMode: e ajuste o quadro do CATextLayer de acordo com o tamanho retornado aqu

Option (b), sendo a abordagem mais simples, deve funcionar. Afinal, ele funciona perfeitamente com UILabels. Mas quando eu apliquei o mesmo cálculo de quadro no CATextLayer, ele estava sempre um pouco maior do que o esperado ou necessári

Como se vê, o espaçamento entre linhas em CATextLayers e UILabels (para a mesma fonte e tamanho) é diferente. Como resultado, sizeWithFont (cujos cálculos de espaçamento entre linhas corresponderiam aos de UILabels) não retorna o tamanho esperado para CATextLayers.

Isso é comprovado imprimindo o mesmo texto usando um UILabel, em comparação com um CATextLayer e comparando os resultados. O texto na primeira linha se sobrepõe perfeitamente (sendo a mesma fonte), mas o espaçamento entre linhas no CATextLayer é um pouco menor que no UILabel. (Desculpe, não posso fazer o upload de uma captura de tela no momento, pois as que eu já tenho contêm dados confidenciais, e atualmente não tenho tempo para fazer um projeto de amostra para obter capturas de tela limpas. Eu tenho tempo)

Esta é uma diferença estranha, mas pensei que seria possível ajustar o espaçamento no CATextLayer especificando o atributo apropriado para o NSAttributedString que eu uso lá, mas esse não parece ser o caso. Olhando para CFStringAttributes.h, não consigo encontrar um único atributo que possa estar relacionado ao espaçamento entre linha

Bottomline:

Parece que não é possível usar o CATextLayer no iOS em um cenário em que a camada é necessária para se ajustar ao seu texto. Estou certo nisso ou estou perdendo alguma coisa?

P.S:

A razão pela qual eu queria usar o CATextLayer e o NSAttributedString é porque a string a ser exibida deve ser colorida de maneira diferente em pontos diferentes. Eu acho que teria que voltar a desenhar as cordas manualmente, como sempre ... é claro que sempre há a opção de hackear os resultados do sizeWithFont para obter a altura da linha adequad

Abusing as tags 'code' um pouco para tornar a postagem mais legíve

Não consigo marcar a postagem com 'CATextLayer' - surpreendentemente, essas tags não existem no momento. Se alguém com reputação suficiente topar com esta postagem, marque-a de acord

questionAnswers(3)

yourAnswerToTheQuestion