এইচটিএমএলকে আইওএসে এনএসএট্রিবিউটেড স্ট্রিংয়ে রূপান্তর করুন


151

আমি একটি উদাহরণ হিসেবে বলা যায় ব্যবহার করছি UIWebViewকিছু টেক্সট প্রক্রিয়া ও এটি সঠিকভাবে রঙ, এটা HTML হিসাবে ফলাফল দেয় বরং এটা প্রদর্শন করার চেয়ে UIWebViewআমি ব্যবহার করে এটি প্রদর্শন করাতে চান Core Textএকটি সঙ্গে NSAttributedString

আমি এটি তৈরি করতে এবং আঁকতে সক্ষম NSAttributedStringকিন্তু আমি কীভাবে HTML কে বৈশিষ্ট্যযুক্ত স্ট্রিংয়ে রূপান্তর করতে এবং মানচিত্র করতে পারি তা সম্পর্কে আমি নিশ্চিত নই।

আমি বুঝতে পারি যে ম্যাক ওএস এক্স NSAttributedStringএর অধীনে একটি initWithHTML:পদ্ধতি রয়েছে তবে এটি ছিল ম্যাক কেবল সংযোজন এবং আইওএসের জন্য উপলভ্য নয়।

আমি এটিও জানি যে এটির সাথেও অনুরূপ প্রশ্ন রয়েছে তবে এর কোনও উত্তর ছিল না, যদিও আমি আবার চেষ্টা করে দেখতে চাই যে কেউ এটি করার জন্য কোনও উপায় তৈরি করেছে কিনা এবং যদি তা হয় তবে তারা ভাগ করে নিতে পারে।


2
এইচটিএমএল লাইব্রেরির জন্য এনএসএট্রিবিউটেড স্ট্রিং-অ্যাডিশনস-এর জন্য একই লেখকের নাম পরিবর্তন করে একটি ফ্রেমওয়ার্কে রোল করা হয়েছে। এটি এখন ডিটিসিওরেক্সট নামে পরিচিত এবং এতে কোর পাঠ্য বিন্যাস শ্রেণীর একগুচ্ছ অন্তর্ভুক্ত রয়েছে। আপনি এটি এখানে
ব্রায়ান ডগলাস মোকলে

উত্তর:


290

আইওএস In-তে, ইউআইকিট এমন একটি initWithData:options:documentAttributes:error:পদ্ধতি যুক্ত করেছে যা NSAttributedStringএইচটিএমএল ব্যবহার করে সূচনা করতে পারে , যেমন:

[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] 
                                 options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                           NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} 
                      documentAttributes:nil error:nil];

সুইফটে:

let htmlData = NSString(string: details).data(using: String.Encoding.unicode.rawValue)
let options = [NSAttributedString.DocumentReadingOptionKey.documentType:
        NSAttributedString.DocumentType.html]
let attributedString = try? NSMutableAttributedString(data: htmlData ?? Data(),
                                                          options: options,
                                                          documentAttributes: nil)

28
কোনও কারণে, এনএসডোকামেন্টটাইপ ডকুমেন্টঅ্যাট্রিবিউট অপশন: এনএসএইচটিএমএলটিেক্সট ডকুমেন্ট টাইপ এনকোডিংটিকে সত্যই, সত্যই দীর্ঘ সময় নিতে বাধ্য করছে :(
অ্যারি লিটোভস্কি

14
খুব খারাপ এনএসএইচটিএমএলটিেক্সট ডকুমেন্টটাইপটি এনএসরেঞ্জের সাথে বৈশিষ্ট্যগুলি সেট করার চেয়ে (আক্ষরিক) ~ 1000x ধীর। (একটি গা bold় ট্যাগ সহ একটি সংক্ষিপ্ত লেবেল লিখেছেন))
জেসন মুর

6
আপনি যদি কোনও ব্যাকগ্রাউন্ড থ্রেড থেকে এটি ব্যবহার করতে চান তবে এই পদ্ধতিটি দিয়ে যদি আপনি এনএসএইচটিএমএল টেক্সট ডকুমেন্ট টাইপ করতে না পারেন তবে সচেতন হন। এমনকি আইওএস 7 সহ, এটি HTML উপস্থাপনার জন্য পাঠ্যকিট ব্যবহার করবে না। ইনগভ দ্বারা প্রস্তাবিত ডিটিসিওরেক্সট লাইব্রেরিটি একবার দেখুন।
টিজেজ

2
অসাধারণ. কেবল একটি চিন্তাভাবনা, আপনি সম্ভবত [এনএসএন নাম্বারবিহীন আইটেমটি দিয়ে: এনএসইটিএফ 8 স্ট্রিংইনকোডিং] @ (এনএসইউটিএফ 8 স্ট্রিংএনকোডিং) হিসাবে করতে পারেন, না?
জারসেন

15
আমি এটি করছিলাম, তবে আইওএস 8-এ সাবধানতা অবলম্বন করুন এটি বেদনাদায়ক ধীরে ধীরে, কয়েকশ অক্ষরের জন্য একটি সেকেন্ডের কাছাকাছি। (আইওএস 7 এ এটি প্রায় তাত্ক্ষণিক ছিল))
নর্মন

43

গিথুবে অলিভার ড্রবনিক দ্বারা এনএসএট্রিবিউটেড স্ট্রিং -এ একটি কার্য-অগ্রগতি ওপেন সোর্স সংযোজন রয়েছে । এটি HTML পার্সিংয়ের জন্য এনএসএস স্ক্যানার ব্যবহার করে।


। আইওএস 4.3 :( কোনটি-কম, খুব চিত্তাকর্ষক এর মিনিট স্থাপনার প্রয়োজন
ওহ ড্যানি বয়

3
@ লিরিক ওভারকিল আপনার জন্য হতে পারে তবে অন্য কারও পক্ষে নিখুঁত অর্থাৎ আপনার মন্তব্য কমপক্ষে সহায়ক নয়।
wuf810

3
দয়া করে নোট করুন যে এই প্রকল্পটির দরকার ওপেন সোর্স এবং একটি স্ট্যান্ডার্ড 2-বিধান বিএসডি লাইসেন্স দ্বারা আচ্ছাদিত। এর অর্থ এই কোডটির মূল লেখক হিসাবে আপনাকে কোকোনেটিক্সের উল্লেখ করতে হবে এবং আপনার অ্যাপ্লিকেশনের মধ্যে লিসেনসি পাঠ্যটি পুনরুত্পাদন করতে হবে।
দুলগান

28

এইচটিএমএল থেকে এনএসএট্রিবিউটেড স্ট্রিং তৈরি করা অবশ্যই মূল থ্রেডে করা উচিত!

আপডেট: দেখা গেছে যে এনএসএট্রিবিউটেড স্ট্রিং এইচটিএমএল রেন্ডারিং হুডের নীচে ওয়েবকিটের উপর নির্ভর করে এবং এটি অবশ্যই মূল থ্রেডে চালিত হতে হবে বা এটি মাঝে মাঝে একটি সাইনপ্রাইপ দিয়ে অ্যাপটি ক্র্যাশ করবে

নতুন রেলিক ক্র্যাশ লগ:

এখানে চিত্র বর্ণনা লিখুন

নীচে একটি আপডেট থ্রেড-সেফ সুইফট 2 স্ট্রিং এক্সটেনশান রয়েছে:

extension String {
    func attributedStringFromHTML(completionBlock:NSAttributedString? ->()) {
        guard let data = dataUsingEncoding(NSUTF8StringEncoding) else {
            print("Unable to decode data from html string: \(self)")
            return completionBlock(nil)
        }

        let options = [NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
                   NSCharacterEncodingDocumentAttribute: NSNumber(unsignedInteger:NSUTF8StringEncoding)]

        dispatch_async(dispatch_get_main_queue()) {
            if let attributedString = try? NSAttributedString(data: data, options: options, documentAttributes: nil) {
                completionBlock(attributedString)
            } else {
                print("Unable to create attributed string from html string: \(self)")
                completionBlock(nil)
            }
        }
    }
}

ব্যবহার:

let html = "<center>Here is some <b>HTML</b></center>"
html.attributedStringFromHTML { attString in
    self.bodyLabel.attributedText = attString
}

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


অ্যান্ড্রু। এটি ভাল কাজ করছে। আমি জানতে চেয়েছিলাম যে সমস্ত সংক্ষিপ্ত ইভেন্টগুলি আমার ইউটিআইটিভিউ ভিউতে হ্যান্ডেল করতে হবে যদি আমি এই পদ্ধতির সাথে যাব। এটি কি ক্যালেন্ডার ইভেন্ট, কল, ইমেল, ওয়েবসাইট লিঙ্ক ইত্যাদি এইচটিএমএলে পাওয়া যায়? আমি আশা করি ইউআইটিেক্সটভিউ ইউআইএলবেলের সাথে তুলনা করে ইভেন্টগুলি পরিচালনা করতে সক্ষম হবে।
কঠোরত 2811

উপরোক্ত পদ্ধতির বিন্যাসের জন্য কেবল ভাল। আপনার যদি ইভেন্ট হ্যান্ডলিংয়ের প্রয়োজন হয় তবে আমি টিটিটিএটিগ্রিবিউটেড লেবেল ব্যবহার করার পরামর্শ দেব
অ্যান্ড্রু শ্রেইবার

এনএসএট্রিবিউটেডস্ট্রিং যে ডিফল্ট এনকোডিংটি ব্যবহার করে তা হ'ল এনএসইউটিএফ 16 স্ট্রিংইনকোডিং (ইউটিএফ 8 নয়!)। এই কারণে এটি কাজ করবে না। আমার ক্ষেত্রে অন্তত!
উমিট কেয়া

এটি গ্রহণযোগ্য সমাধান হওয়া উচিত। একটি ব্যাকগ্রাউন্ড থ্রেডে একটি HTML স্ট্রিং কথোপকথন করছেন করবে অবশেষে বিপর্যস্ত, এবং খুব ঘন ঘন পরীক্ষাগুলি চালানোর সময়।
রত্সিমিহ

21

এনএসএট্রিবিউটেড স্ট্রিংয়ে সুইফ্ট ইনিশিয়েলার এক্সটেনশন

আমার প্রবণতাটি এটিকে NSAttributedStringবরং এক্সটেনশান হিসাবে যুক্ত করার ছিল String। আমি এটি একটি স্ট্যাটিক এক্সটেনশন এবং একটি আরম্ভকারী হিসাবে চেষ্টা করেছি। আমি আরম্ভকারীটিকে পছন্দ করি যা আমি নীচে অন্তর্ভুক্ত করেছি।

সুইফট 4

internal convenience init?(html: String) {
    guard let data = html.data(using: String.Encoding.utf16, allowLossyConversion: false) else {
        return nil
    }

    guard let attributedString = try?  NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil) else {
        return nil
    }

    self.init(attributedString: attributedString)
}

সুইফট 3

extension NSAttributedString {

internal convenience init?(html: String) {
    guard let data = html.data(using: String.Encoding.utf16, allowLossyConversion: false) else {
        return nil
    }

    guard let attributedString = try? NSMutableAttributedString(data: data, options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil) else {
        return nil
    }

    self.init(attributedString: attributedString)
}
}

উদাহরণ

let html = "<b>Hello World!</b>"
let attributedString = NSAttributedString(html: html)

আমি হ্যালো দুনিয়াটি এইরকম হতে চাই <p> <<<<i>hello</i> </b> <i> ওয়ার্ল্ড </ i> </p>
উমা মাধবী

কিছু এলওসি সংরক্ষণ করুন এবং এর guard ... NSMutableAttributedString(data:...দ্বারা প্রতিস্থাপন try self.init(data:...করুন (এবং throwsinit এ যুক্ত করুন)
nyg

এবং শেষ পর্যন্ত এটি কাজ করে না - পাঠ্যটি এলোমেলো ফন্টের আকার অর্জন করে
ভাইচাস্লাভ জেরচিকভ

2
আপনি ইউটিএফ -8 দিয়ে ডেটা ডিকোড করছেন তবে আপনি এটি ইউটিএফ -16 দিয়ে এনকড করেছেন
শ্যাম ভাট

11

এটি Stringএইচটিএমএল স্ট্রিং হিসাবে ফিরে আসতে সুইফটে লিখিত একটি এক্সটেনশন NSAttributedString

extension String {
    func htmlAttributedString() -> NSAttributedString? {
        guard let data = self.dataUsingEncoding(NSUTF16StringEncoding, allowLossyConversion: false) else { return nil }
        guard let html = try? NSMutableAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) else { return nil }
        return html
    }
}

ব্যবহার করা,

label.attributedText = "<b>Hello</b> \u{2022} babe".htmlAttributedString()

উপরের দিকগুলিতে আমি উদ্দেশ্যমূলকভাবে একটি ইউনিকোড যুক্ত করেছি যাতে এটি ইউনিকোডকে সঠিকভাবে রেন্ডার করে।

একটি তুচ্ছ: ডিফল্ট এনকোডিং যা NSAttributedStringব্যবহার করে তা হ'ল NSUTF16StringEncoding(ইউটিএফ 8 নয়!)।


ইউটিএফ 16 আমার দিনটি বাঁচিয়েছে, ধন্যবাদ সামউইজ!
ইউয়েউ

ইউটিএফ 16 আমার দিনটি বাঁচিয়েছে, ধন্যবাদ সামউইজ!
ইউয়েউ

6

অ্যান্ড্রু এর সমাধান সম্পর্কে কিছু সংশোধন করে এবং কোডটি সুইফট 3 এ আপডেট করুন:

এই কোডটি এখন ইউআইটিেক্সটভিউ হিসাবে ব্যবহার করে selfএবং এর মূল ফন্ট, ফন্টের আকার এবং পাঠ্যের রঙের উত্তরাধিকারী হতে সক্ষম

দ্রষ্টব্য: এখানtoHexString() থেকে এক্সটেনশন

extension UITextView {
    func setAttributedStringFromHTML(_ htmlCode: String, completionBlock: @escaping (NSAttributedString?) ->()) {
        let inputText = "\(htmlCode)<style>body { font-family: '\((self.font?.fontName)!)'; font-size:\((self.font?.pointSize)!)px; color: \((self.textColor)!.toHexString()); }</style>"

        guard let data = inputText.data(using: String.Encoding.utf16) else {
            print("Unable to decode data from html string: \(self)")
            return completionBlock(nil)
        }

        DispatchQueue.main.async {
            if let attributedString = try? NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) {
                self.attributedText = attributedString
                completionBlock(attributedString)
            } else {
                print("Unable to create attributed string from html string: \(self)")
                completionBlock(nil)
            }
        }
    }
}

ব্যবহারের উদাহরণ:

mainTextView.setAttributedStringFromHTML("<i>Hello world!</i>") { _ in }

5

সুইফট 3.0 এক্সকোড 8 সংস্করণ

func htmlAttributedString() -> NSAttributedString? {
    guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }
    guard let html = try? NSMutableAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) else { return nil }
    return html
}

5

সুইফট 4


  • এনএসএট্রিবিউটেড স্ট্রিং সুবিধার্থ সূচনা
  • অতিরিক্ত গার্ড ছাড়া
  • ত্রুটি নিক্ষেপ

extension NSAttributedString {

    convenience init(htmlString html: String) throws {
        try self.init(data: Data(html.utf8), options: [
            .documentType: NSAttributedString.DocumentType.html,
            .characterEncoding: String.Encoding.utf8.rawValue
        ], documentAttributes: nil)
    }

}

ব্যবহার

UILabel.attributedText = try? NSAttributedString(htmlString: "<strong>Hello</strong> World!")

তুমি আমার দিন বাঁচাও ধন্যবাদ.
pkc456

@ pkc456 meta.stackexchange.com/questions/5234/… , আপভোট করুন :) ধন্যবাদ!
আমিরআর

আমি কীভাবে হরফ আকার এবং ফন্ট পরিবার সেট করতে পারি?
কিরক

এটি মোবাইল ড্যানের পরামর্শের চেয়ে অনেক ভাল, যেহেতু এতে সেলফিনাইট (অ্যাট্রিবিউটস্ট্রিং: অ্যাট্রিবিউটস্ট্রিং)
সায়ানাইডের

4

এই মুহূর্তে আপনার কাছে কেবলমাত্র সমাধানটি হ'ল এইচটিএমএলকে বিশ্লেষণ করা, প্রদত্ত পয়েন্ট / ফন্ট / ইত্যাদি বৈশিষ্ট্য সহ কয়েকটি নোড তৈরি করা, তারপরে এগুলি একত্রে একটি এনএসএট্রিবিউটেড স্ট্রিংয়ে একত্রিত করুন। এটি অনেক কাজ, তবে সঠিকভাবে করা গেলে ভবিষ্যতে পুনরায় ব্যবহারযোগ্য হতে পারে।


1
যদি এইচটিএমএলটি এক্সএইচটিএমএল-কঠোর হয়, আপনি পার্সিংয়ে সহায়তা করার জন্য এনএসএক্সএমএলডিউকামেন্ট এবং বন্ধুদের ব্যবহার করতে পারেন।
ডিলান লুকস

আপনি কীভাবে পরামর্শ দেবেন যে আমি প্রদত্ত গুণাবলী সহ নোডগুলি তৈরি করব?
জোশুয়া

2
এটি একটি বাস্তবায়ন বিশদ। তবে আপনি এইচটিএমএলকে বিশ্লেষণ করলেও প্রতিটি ট্যাগের প্রতিটি বৈশিষ্ট্যের অ্যাক্সেস রয়েছে যা ফন্টের নাম, আকার ইত্যাদির মতো জিনিস নির্দিষ্ট করে You । সাধারণত, এই জাতীয় কোনও কাজ সামাল দেওয়ার আগে আপনাকে প্রথমে পার্সিংয়ের সাথে নিজেকে পরিচিত করতে হবে।
jer

2

উপরের সমাধানটি সঠিক।

[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] 
                                 options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                           NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} 
                      documentAttributes:nil error:nil];

তবে আপনি যদি অ্যাপটি আইওএস 8.1,2 বা 3 এ চালাচ্ছেন তবে অ্যাপ্লিকেশন উইল ক্র্যাশ।

ক্রাশ এড়াতে আপনি যা করতে পারেন তা হ'ল: এটিকে একটি কাতারে চালান। যাতে এটি সর্বদা মূল থ্রেডে থাকে।


@ আলেেক্স আমি একই সমস্যাটি পূরণ করেছি! অ্যাপ্লিকেশনটি আইওএস 8.1, 2, 3-এ ক্রাশ হবে তবে আইওএস 8.4 বা তার পরে ঠিক থাকবে। কীভাবে এড়ানো যায় সে সম্পর্কে আপনি বিশদ ব্যাখ্যা করতে পারেন? বা আশেপাশে কোন কাজ আছে, বা এর পরিবর্তে পদ্ধতিগুলি ব্যবহার করা যেতে পারে?
শক্তিশালী

এটি পরিচালনা করার জন্য আমি একটি দ্রুত বিভাগ তৈরি করেছি, অ্যাপকিট থেকে পদ্ধতিগুলি অনুলিপি করে যা এটি করার জন্য খুব সহজ এবং স্বজ্ঞাত উপায়। কেন অ্যাপল এটি যোগ করা হয়নি আমাকে পরলোক হল .: github.com/cguess/NSMutableAttributedString-HTML
CGuess

2

এনএসএইচটিএমএলটিেক্সট ডকুমেন্টটাইপ ব্যবহার ধীর এবং স্টাইলগুলি নিয়ন্ত্রণ করা শক্ত। আমি আপনাকে আমার লাইব্রেরি যা অ্যাট্রিবিউটিকা বলা হয় চেষ্টা করার পরামর্শ দিচ্ছি। এটির নিজস্ব একটি খুব দ্রুত HTML পার্সার রয়েছে p এছাড়াও আপনার যে কোনও ট্যাগের নাম থাকতে পারে এবং তাদের জন্য কোনও স্টাইল সংজ্ঞায়িত করতে পারেন।

উদাহরণ:

let str = "<strong>Hello</strong> World!".style(tags:
    Style("strong").font(.boldSystemFont(ofSize: 15))).attributedString

label.attributedText = str

আপনি এটি এখানে https://github.com/psharanda/Atributika খুঁজে পেতে পারেন


2

সুইফট 3 : এটি
চেষ্টা করুন :

extension String {
    func htmlAttributedString() -> NSAttributedString? {
        guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }
        guard let html = try? NSMutableAttributedString(
            data: data,
            options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
            documentAttributes: nil) else { return nil }
        return html
    }
}  

এবং ব্যবহারের জন্য:

let str = "<h1>Hello bro</h1><h2>Come On</h2><h3>Go sis</h3><ul><li>ME 1</li><li>ME 2</li></ul> <p>It is me bro , remember please</p>"

self.contentLabel.attributedText = str.htmlAttributedString()

0

সহায়ক এক্সটেনশনগুলি

এই থ্রেড, একটি শুঁটি, এবং iOS পানভোজনবিলাসী Cookbook p.80 মধ্যে এরিকা Sadun এর ObjC উদাহরণ দ্বারা অনুপ্রাণিত, আমি একটি এক্সটেনশন লিখেছিলেন Stringএবং এর NSAttributedStringআগে পিছে এইচটিএমএল প্লেইন-স্ট্রিং এবং NSAttributedStrings এবং ভাইস মধ্যে বিপরীতভাবে যেতে - GitHub থেকে এখানে , যা আমি সহায়ক খুঁজে পেয়েছি।

স্বাক্ষর (আবার, একটি সারকথা পূর্ণ কোড, উপরে লিঙ্ক) আছেন:

extension NSAttributedString {
    func encodedString(ext: DocEXT) -> String?
    static func fromEncodedString(_ eString: String, ext: DocEXT) -> NSAttributedString? 
    static func fromHTML(_ html: String) -> NSAttributedString? // same as above, where ext = .html
}

extension String {
    func attributedString(ext: DocEXT) -> NSAttributedString?
}

enum DocEXT: String { case rtfd, rtf, htm, html, txt }

0

হরফ সহ

extension NSAttributedString
{
internal convenience init?(html: String, font: UIFont? = nil) {
    guard let data = html.data(using: String.Encoding.utf16, allowLossyConversion: false) else {
        return nil
    }
    assert(Thread.isMainThread)
    guard let attributedString = try?  NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil) else {
        return nil
    }
    let mutable = NSMutableAttributedString(attributedString: attributedString)
    if let font = font {
        mutable.addAttribute(.font, value: font, range: NSRange(location: 0, length: mutable.length))
    }
    self.init(attributedString: mutable)
}
}

বিকল্পভাবে আপনি যে সংস্করণগুলি থেকে উদ্ভূত হয়েছিল সেগুলি ব্যবহার করতে পারেন এবং বৈশিষ্ট্যযুক্ত স্ট্রিং সেট করার পরে ইউআইএলবেলে ফন্ট সেট করতে পারেন


0

রূপান্তরিত অন্তর্নির্মিতটি সর্বদা পাঠ্য রঙটি ইউআইক্লোর.ব্ল্যাককে সেট করে, এমনকি যদি আপনি .ফোরগ্রাউন্ড রঙের সাথে একটি অ্যাট্রিবিউট ডিকশনারি পাস করেন তবে অন্য কোনও কিছুর জন্য সেট করুন। আইওএস 13 এ ডার্ক মোড সমর্থন করার জন্য, এনএসএট্রিবিউটড স্ট্রিংয়ে এক্সটেনশনের এই সংস্করণটি ব্যবহার করে দেখুন।

extension NSAttributedString {
    internal convenience init?(html: String)                    {
        guard 
            let data = html.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }

        let options : [DocumentReadingOptionKey : Any] = [
            .documentType: NSAttributedString.DocumentType.html,
            .characterEncoding: String.Encoding.utf8.rawValue
        ]

        guard
            let string = try? NSMutableAttributedString(data: data, options: options,
                                                 documentAttributes: nil) else { return nil }

        if #available(iOS 13, *) {
            let colour = [NSAttributedString.Key.foregroundColor: UIColor.label]
            string.addAttributes(colour, range: NSRange(location: 0, length: string.length))
        }

        self.init(attributedString: string)
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.