※追記で書きましたけど、理由がわかったのでタイトル変更(笑)
(旧タイトル:NSAttributedStringの罠にハマった話..)
文字の装飾等で便利なNSAttributedString
ですが…
こいつの意外な罠にはまったお話
事象
文字サイズの変更ができない…効かない
この一言に尽きるのですが…
NSFontAttributeName
でUIFont
を指定しても全然文字サイズが変わらない場合がある
原因
原因というか…なんというか
ストーリーボード上でUILabel
のFontをサイズクラス別に指定が合った場合、コードでの設定が無視される
っていう仕様なのか、バグなのか…
(xib単体では検証してません...TextViewもしてません)
詳細
具体的にはもろもろこんな感じ
ストーリーボードの設定
ストーリーボードでこういう設定
Fontの指定を追加してるだけで、あとは一緒(デフォルトのまま)
検証コード
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var label2: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.setupAttributedString("hello world!!", target: self.label)
self.setupAttributedString("good-bye world...", target: self.label2)
}
func setupAttributedString(text: String, target: UILabel) {
let attributedString = NSMutableAttributedString(string: text)
attributedString.addAttribute(NSFontAttributeName, value: UIFont(name: "Helvetica Neue", size: 30.0)!, range: NSMakeRange(0, 5))
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSMakeRange(0, 5))
target.attributedText = attributedString
}
}
短いのでまるっとのせておきます
どこか変でしょうか…。
期待してる装飾内容は
先頭5文字を大きくして、赤文字に
という感じ
結果
実行結果はこう
Fontの追加設定をしてないlabel1
のほうは期待通り...
label2
の方はアカーーーーーン!!!
有名な話なのでしょうか…
解決策
わかりません、すみません…
教えてください、お願いします。
あれこれやってもできなかったので、
Fontの追加指定を諦めました(汗)
コードでポチッと設定したらもとより意味無いですしね。。。ですよねorz
ちなみに、実際はTableCell上のLabelで発生してたのですけど
そのときは、最初はこの通りだめでしたが
スクロールとかして reuse させると期待通りになるんですよね。。。
謎いです....
追記
寝て起きたら分かった
サイズ毎に指定されていた場合、お得意のviewDidAppear:
ぐらいのタイミングで決定するんですね。。
(‘viewDidAppear:`で同じことしたら大丈夫でした)
AutoLayoutも然りですもんね...
だからcellのreuseだと効くし、別にNSAttributedStringどーのこーのという話でもない
初歩の話でした
睡眠大事(汗)