在不丢失 Html 样式的情况下更改 NSAttributedString 中的字体大小 - Swift

ysn*_*yhn 4 html font-size uitextview ios swift

我在 uiTextView 中添加了一个 html 格式的字符串。一切正常,直到我尝试增加或减少字体大小。当我按下增加或减少按钮时,整个 html 样式和字体都会丢失。如何在不丢失html样式和字体的情况下增加或减少字体?

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

import UIKit

extension UILabel {
 func increaseFontSize (txt: String) {
    //        self.font.fontWithSize(self.font.pointSize+1)
    self.font =  UIFont(name: self.font.fontName, size:        self.font.pointSize+1)!
    //self.font.fontWithSize(self.font.pointSize-1)

    var attrStr = NSAttributedString(
        data: txt.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
        options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
        documentAttributes: nil,
        error: nil)

    self.attributedText = attrStr

    self.sizeToFit()
}
func decreaseFontSize (txt: String) {
    //        self.selectable = true
    self.font =  UIFont(name: self.font.fontName, size: self.font.pointSize-1)!
    //self.font.fontWithSize(self.font.pointSize-1)

    var attrStr = NSAttributedString(
        data: txt.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
        options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
        documentAttributes: nil,
        error: nil)
    self.attributedText = attrStr

    self.sizeToFit()
    //        self.selectable = false
   }

}
Run Code Online (Sandbox Code Playgroud)

类 ViewController2: UIViewController {

   @IBOutlet weak var label: UILabel!


@IBAction func decr(sender: AnyObject) {
    label.decreaseFontSize(text)

}

@IBAction func inc(sender: AnyObject) {
    label.increaseFontSize(text)
}

// Do any additional setup after loading the view, typically from a nib.
var text:String = String("<h1 style=\"text-align:center\"> UNIQUE INTERNATIONAL </h1> Unique International turizm ?irketimiz, kongre turizmi ve otel i?letmecili?i alan?nda lider konuma sahiptir. Unique turizm ?irketimiz 2010 y?l?nda Yükselir ?irketler Grubu çat?s? alt?nda faaliyetlerine ba?lam??t?r. ?irketimiz, Uluslararas? Kongre Turizmi, Toplant? Organizasyonlar?, Lansman, Konser, Tan?t?m ve Yatç?l?k gibi konularda mü?terimize ve i? ortaklar?m?za, Körfez Ülkeleri ve Arap Emirlikleri ba?ta olmak üzere hizmetlerine devam etmektedir. Her türlü organizasyona göre proje geli?tirme, uluslararas? sanatç? ve ileti?im alanlar?nda koordinasyonu al???lagelmi?in d???nda creative çözümlerle en kaliteli hizmeti profesyonelce sa?lamak ilkesini benimsemi?tir. Ald??? takdir ve ödülleriyle daha da güçlenerek sektöre ivme kazand?rmaya devam etmektedir. <br /><br /> Unique, uluslararas? ‘Sürdürülebilir Turizm Kalk?nmas?’ kurallar?na göre turizmde yer alan ev sahipli?i ve turist kesimlerinin ihtiyaçlar?n? ve bugün var olan kaynaklar?n?n gelecekte de?erlerinin art?r?larak ve korunarak kar??lanmas?n? ilke edinmi?tir. (WTO-Dünya Turizm Birli?i, 1998) Daha genel bir tan?mla, sürdürülebilir turizm, insan?n etkile?imde bulundu?u yada bulunmad??? çevrenin bozulmadan veya de?i?tirilmeden korunarak, kültürel bütünlü?ün, ekolojik süreçlerin, biyolojik çe?itlili?in ve ya?am? sürdüren sistemlerin sürdürüldü?ü ve ayn? zamanda tüm kaynaklar?n ziyaret edilen bölgedeki insanlar?n ve turistlerin ekonomik, sosyal ve estetik ihtiyaçlar?n? doyuracak ?ekilde ve gelecek nesillerin de ayn? ihtiyaçlar?n? kar??layabilecekleri biçimde yönetildi?i bir kalk?nma ?eklidir; Unique Uluslararas? Turizm ?irketimiz, organizasyonlar düzenledi?i her ülke, ?ehir, tarihi bölgeler ve ülkelerin kals?nmas?nda yat?r?mlar? ve kaynaklar?yla önemli ölçüde kalk?nmaya destek olmaya ve faaliyetlerine yeni yat?r?mlar?na devam etmektedir. </br></br></br></br> ")

override func viewDidLoad() {
    super.viewDidLoad()



    var attrStr = NSAttributedString(
        data: text.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
        options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
        documentAttributes: nil,
        error: nil)
    label.attributedText = attrStr
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}   
Run Code Online (Sandbox Code Playgroud)

}

Joe*_*ith 5

我不知道为什么您的代码中的功能增加字体大小和减少字体大小需要参数 txt 。换句话说,我不认为我完全理解你想要达到的目标。

这里有一些代码供您参考。它是从我为 UITextView 扩展创建的函数中修改而来的。我认为它也应该适用于 UILabel。我自己没有测试过这个。主要思想是在保留其他属性的同时更改字体大小。

func increaseFontSizeBy(pointSize: CGFloat) {
    let fullRange = NSRange(location: 0, length: count(text))
    var mutableAttributeText = NSMutableAttributedString(attributedString: attributedText)
    mutableAttributeText.enumerateAttribute(NSFontAttributeName, inRange: fullRange, options: NSAttributedStringEnumerationOptions.LongestEffectiveRangeNotRequired) {
        (attribute: AnyObject!, range: NSRange, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
        if let attributeFont = attribute as? UIFont {
            let newPointSize = attributeFont.pointSize + pointSize
            let scaledFont = UIFont(descriptor: attributeFont.fontDescriptor(), size: newPointSize)
            mutableAttributeText.addAttribute(NSFontAttributeName, value: scaledFont, range: range)
        }
    }
    attributedText = mutableAttributeText
}
Run Code Online (Sandbox Code Playgroud)