Change font size in NSAttributedString without losing HTML style - Swift

I added a line of html to the uiTextView. Everything worked fine until I try to increase or decrease the font size. When I click the Zoom In or Zoom Out button, all the html style and font are lost. How to increase or decrease the font without losing html style and font?

enter image description here

enter image description here

enter image description here

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
   }

}

      

class 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.
}   

      

}

+3


source to share


1 answer


I don't know why the txt parameter is needed for the increaseFontSize and reduceFontSize functions in your code. In other words, I don't think I fully understand what you are trying to achieve.

Here's some code for your reference. It was modified with a function I created for an extension for UITextView. I think it should work for UILabel as well. I have not tested this myself. The main idea is to change the font sizes while preserving other attributes.



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
}

      

+3


source







All Articles