3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SizeClassでハマった話...

Last updated at Posted at 2015-03-12

※追記で書きましたけど、理由がわかったのでタイトル変更(笑)
(旧タイトル:NSAttributedStringの罠にハマった話..)


文字の装飾等で便利なNSAttributedStringですが…
こいつの意外な罠にはまったお話

事象

文字サイズの変更ができない…効かない

この一言に尽きるのですが…
NSFontAttributeNameUIFontを指定しても全然文字サイズが変わらない場合がある

原因

原因というか…なんというか

ストーリーボード上でUILabelのFontをサイズクラス別に指定が合った場合、コードでの設定が無視される

っていう仕様なのか、バグなのか…
(xib単体では検証してません...TextViewもしてません)

詳細

具体的にはもろもろこんな感じ

ストーリーボードの設定

Main_storyboard.png

ストーリーボードでこういう設定
Fontの指定を追加してるだけで、あとは一緒(デフォルトのまま)

検証コード

ViewController.swift

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文字を大きくして、赤文字に
という感じ

結果

実行結果はこう

iOS_Simulator_Screen Shot.png

Fontの追加設定をしてないlabel1のほうは期待通り...
label2の方はアカーーーーーン!!!

有名な話なのでしょうか…

解決策

わかりません、すみません…
教えてください、お願いします。

あれこれやってもできなかったので、
Fontの追加指定を諦めました(汗)
コードでポチッと設定したらもとより意味無いですしね。。。ですよねorz

ちなみに、実際はTableCell上のLabelで発生してたのですけど
そのときは、最初はこの通りだめでしたが
スクロールとかして reuse させると期待通りになるんですよね。。。
謎いです....

追記

寝て起きたら分かった
サイズ毎に指定されていた場合、お得意のviewDidAppear:ぐらいのタイミングで決定するんですね。。
(‘viewDidAppear:`で同じことしたら大丈夫でした)
AutoLayoutも然りですもんね...
だからcellのreuseだと効くし、別にNSAttributedStringどーのこーのという話でもない
初歩の話でした

睡眠大事(汗)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?