Estou tentando obter um trecho de texto formatado em html para exibir bem em um iPhone em um UITableViewCell.
Até agora eu tenho o seguinte:
NSError* error;
NSString* source = @"<strong>Nice</strong> try, Phil";
NSMutableAttributedString* str = [[NSMutableAttributedString alloc] initWithData:[source dataUsingEncoding:NSUTF8StringEncoding]
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]}
documentAttributes:nil error:&error];
Este tipo de obras. Recebo algum texto com 'Nice' em negrito! Mas ... também define a fonte como Times Roman! Esta não é a face da fonte que eu quero. Acho que preciso definir algo no documentAttributes, mas não consigo encontrar nenhum exemplo em nenhum lugar.
html
ios
nsattributedstring
phil
fonte
fonte
Respostas:
Versão Swift 2 , com base na resposta de Javier Querol
Swift 3.0 e iOS 9 ou superior
Swift 5 e iOS 11 ou superior
fonte
font-family: '-apple-system', 'HelveticaNeue';
(o que funciona e também é compatível com versões anteriores). Se você só apoiar iOS9font-family: -apple-system;
pode ser usadocolor: #000000
. Veja este link para converter UIColor em string hexadecimal: gist.github.com/yannickl/16f0ed38f0698d9a8ae7Dessa forma, você não precisa especificar qual fonte deseja, ela terá a fonte e o tamanho da etiqueta.
fonte
NSUnicodeStringEncoding
e, em seguida, codifica os dados novamente em caracteres comNSUTF8StringEncoding
. Tudo bem?Na verdade, encontrei uma solução funcional para esse problema:
Alterando a fonte na sua string de resposta HTML antes de ser analisada.
Exemplo:
Versão rápida:
fonte
Descobri isso. Um pouco de urso, e talvez não seja a melhor resposta.
Este código passará por todas as alterações de fonte. Eu sei que ele está usando "Times New Roman" e "Times New Roman BoldMT" para as fontes. Porém, independentemente, isso encontrará as fontes em negrito e permita-me redefini-las. Também posso redefinir o tamanho enquanto estou nele.
Sinceramente, espero / acho que existe uma maneira de configurar isso no momento da análise, mas não consigo encontrá-lo, se houver.
fonte
Uma abordagem mais genérica é examinar as características da fonte durante a enumeração e criar uma fonte com as mesmas características (negrito, itálico etc.):
fonte
Sim, existe uma solução mais fácil. Defina a fonte na fonte html!
Espero que isto ajude.
fonte
Atualização Swift 4+ da extensão UILabel
iOS 9 ou superior
fonte
As respostas acima de tudo funcionam bem se você estiver fazendo a conversão ao mesmo tempo em que cria o arquivo
NSAttributedString
. Mas acho que uma solução melhor, que funciona na própria string e, portanto, não precisa de acesso à entrada, é a seguinte categoria:Use como:
Funciona no iOS 7 ou superior
fonte
Melhorando a solução de Victor, incluindo cores:
Para que isso funcione, você também precisará do YLColor.swift da conversão uicolor para hexadecimal https://gist.github.com/yannickl/16f0ed38f0698d9a8ae7
fonte
O uso de NSHTMLTextDocumentType é lento e difícil de controlar estilos. Eu sugiro que você tente minha biblioteca chamada Atributika. Ele possui seu próprio analisador muito rápido. Além disso, você pode ter qualquer nome de tag e definir qualquer estilo para eles.
Exemplo:
Você pode encontrá-lo aqui https://github.com/psharanda/Atributika
fonte
Juntando as respostas de todos, fiz duas extensões que permitem definir um rótulo com texto html. Algumas respostas acima não interpretaram corretamente a família da fonte nas seqüências atribuídas. Outros estavam incompletos para minhas necessidades ou falharam de outras maneiras. Deixe-me saber se há algo que você gostaria que eu melhorasse.
Espero que isso ajude alguém.
fonte
UILabel
eUITextView
. obrigado!Obrigado pelas respostas, gostei muito da extensão, mas ainda não me converti em rápida. Para aqueles que ainda estão no Objetivo-C, isso deve ajudar um pouco: D
Feliz codificação! --Greg Frame
fonte
Extensão rápida de 3 cordas, incluindo uma fonte nula. A propriedade sem fonte é retirada de outra pergunta SO, não se lembra qual :(
fonte
Aqui está uma extensão para NSString que retorna um NSAttributedString usando Objective-C.
Ele lida corretamente com uma string com tags HTML e define a fonte e a cor da fonte desejadas, preservando as tags HTML, incluindo BOLD, ITALICS ...
O melhor de tudo é que não depende de nenhum marcador HTML para definir os atributos da fonte.
fonte
Na verdade, existe uma maneira ainda mais fácil e limpa. Basta definir a fonte depois de analisar o HTML:
fonte