更改NSAttributedString中的字体大小而不会丢失Html样式 - Swift

时间:2015-05-23 19:40:02

标签: html ios swift uitextview font-size

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

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
   }

}

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

}

1 个答案:

答案 0 :(得分:3)

我不知道为什么代码中的函数increaseFontSize和decreaseFontSize需要参数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
}