AutoLayout
UILabel
Autoresizing
ios10
Xcode8

AutoLayoutとAutoresizingを併用してUILabelを載せた時に、ラベルのフォントサイズが変わらずハマった時の対処法

More than 1 year has passed since last update.

状況説明が難しいのですが、AutoLayout と AutoResizingを併用してUILabelを表示した時に、RectのsizeはAutoResizeされるものの、フォントサイズが調整されず、storyboardのインスペクターの値を調整しまくっても修正できずハマったので共有します。

図ならわかるかな。

こんな状況です。
ラベルのフォントサイズが端末によって違っているのが分かりますか?
sizes.png

ラベルと黄色いビューは濃いグレーのビューの上にaddSubviewされています。

濃いグレーのビューはconstraintを使って、端末が変わっても縦横比同じで画面中央に配置されるようにしています。


ググっていたら、「ラベルのAutoshrinkをminimumFontSizeに変えればいいよ」みたいなアドバイスがあったので以下のようにやってみましたがダメ。
スクリーンショット 2016-11-13 13.30.48.png


さて、困ったぞと思った時に出会ったのがこちらのリンクの最後の回答
Resize a UILabel so it looks the same on iPhone and iPad

スクリーンショット 2016-11-13 13.49.34.png

これを参考にしながら、ラベルを@IBOutletでプロパティにして、コードで調整したら直りました。

import UIKit

class ViewController: UIViewController {

    // storyboardでラベルを@IBOutlet化
    @IBOutlet weak var myLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        // フォントサイズを指定
        let size = UIScreen.main.bounds.size
        let adjustValue : CGFloat = 20.0  // ここの値を変更してサイズを調整してください
        let font = UIFont.systemFont(ofSize: size.height/adjustValue)

        myLabel.font = font
    }
}

はいこの通り直りました。
sizes2.png

ちょっと状況がややこしいのですが、誰か同じような状況になっている人に役立てば幸いです。