Saya mencoba mendapatkan potongan teks yang diformat dalam html untuk ditampilkan dengan baik di iPhone di UITableViewCell.
Sejauh ini saya punya ini:
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];
Jenis pekerjaan ini. Saya mendapatkan beberapa teks dengan tulisan 'Nice' dalam huruf tebal! Tapi ... itu juga mengatur font menjadi Times Roman! Ini bukan wajah font yang saya inginkan. Saya pikir saya perlu mengatur sesuatu di documentAttributes, tetapi, saya tidak dapat menemukan contoh di mana pun.
html
ios
nsattributedstring
phil
sumber
sumber
Jawaban:
Versi Swift 2 , berdasarkan jawaban yang diberikan oleh Javier Querol
Swift 3.0 dan iOS 9+
Swift 5 dan iOS 11+
sumber
font-family: '-apple-system', 'HelveticaNeue';
(yang berfungsi, dan juga kompatibel dengan mundur). Jika Anda hanya mendukung iOS9font-family: -apple-system;
dapat digunakancolor: #000000
. Lihat tautan ini untuk mengonversi UIColor ke hex string: gist.github.com/yannickl/16f0ed38f0698d9a8ae7Dengan cara ini Anda tidak perlu menentukan font mana yang Anda inginkan, itu akan mengambil font dan ukuran label.
sumber
NSUnicodeStringEncoding
dan kemudian menyandikan data kembali ke karakter denganNSUTF8StringEncoding
. Apakah itu oke?Saya sebenarnya menemukan solusi untuk masalah ini:
Mengubah font di string respons HTML Anda sebelum diuraikan.
Contoh:
Versi cepat:
sumber
Menemukannya. Sedikit beruang, dan mungkin bukan jawaban terbaik.
Kode ini akan melalui semua perubahan font. Saya tahu bahwa itu menggunakan "Times New Roman" dan "Times New Roman BoldMT" untuk font. Tapi bagaimanapun, ini akan menemukan huruf tebal dan biarkan saya mengatur ulang Saya juga dapat mengatur ulang ukuran saat saya melakukannya.
Sejujurnya saya berharap / berpikir ada cara untuk mengatur ini pada waktu parse, tetapi saya tidak dapat menemukannya jika ada.
sumber
Pendekatan yang lebih umum adalah dengan melihat sifat font saat menghitung, dan membuat font dengan sifat yang sama (cetak tebal, miring, dll.):
sumber
Ya, ada solusi yang lebih mudah. Atur font di sumber html!
Semoga ini membantu.
sumber
Swift 4+ pembaruan ekstensi UILabel
iOS 9+
sumber
Jawaban di atas semuanya berfungsi OK jika Anda melakukan konversi bersamaan dengan membuat
NSAttributedString
. Tapi saya pikir solusi yang lebih baik, yang bekerja pada string itu sendiri dan karena itu tidak memerlukan akses ke input, adalah kategori berikut:Digunakan sebagai:
Bekerja di iOS 7+
sumber
Memperbaiki solusi Victor, termasuk warna:
Agar ini berfungsi, Anda juga perlu YLColor. Perpindahan dari konversi uicolor ke hex https://gist.github.com/yannickl/16f0ed38f0698d9a8ae7
sumber
Penggunaan NSHTMLTextDocumentType lambat dan sulit untuk mengontrol gaya. Saya sarankan Anda untuk mencoba perpustakaan saya yang disebut Atributika. Ini memiliki pengurai yang sangat cepat. Anda juga dapat memiliki nama tag dan menentukan gaya apa pun untuknya.
Contoh:
Anda dapat menemukannya di sini https://github.com/psharanda/Atributika
sumber
Bergabung bersama jawaban semua orang, saya membuat dua ekstensi yang memungkinkan pengaturan label dengan teks html. Beberapa jawaban di atas tidak benar menafsirkan keluarga font di string yang dikaitkan. Yang lain tidak lengkap untuk kebutuhan saya atau gagal dengan cara lain. Beri tahu saya jika ada yang ingin Anda tingkatkan.
Saya harap ini membantu seseorang.
sumber
UILabel
danUITextView
. Terima kasih!Terima kasih atas jawabannya, saya sangat menyukai ekstensi tetapi saya belum mengonversi ke swift. Bagi anak-anak sekolah tua yang masih di Objective-C ini seharusnya sedikit membantu: D
Selamat Coding! --Greg Frame
sumber
Ekstensi Swift 3 String termasuk font nil. Properti tanpa font diambil dari pertanyaan SO lainnya, jangan ingat yang mana :(
sumber
Berikut ini adalah ekstensi untuk NSString yang mengembalikan NSAttributedString menggunakan Objective-C.
Ini dengan benar menangani string dengan tag HTML dan menetapkan font dan warna font yang diinginkan sambil mempertahankan tag HTML termasuk BOLD, ITALICS ...
Yang terbaik dari semuanya itu tidak bergantung pada penanda HTML untuk mengatur atribut font.
sumber
Sebenarnya, cara yang lebih mudah dan bersih ada. Cukup atur font setelah parsing HTML:
sumber