

時計アプリをつくっています。（針ではなくデジタル風の数字で表すタイプです。）UILabelをつかって時間を表示しているのですが、時間を表す数字が変わっていく度に、UILabelのサイズがリサイズされ、表示している数字のフォントも微妙に左右に動いてしまいます。iPhone等の時計アプリのように自然な感じしたいのですが、どうすればよいのでしょうか？
sizeToFitが原因なのかな？と思っているのですが、ストーリーボードでUILabelを配置しただけで、コードで指示はしていません。等幅フォントを使えば解決するのかも知れませんが、そういうフォントは使用可能なのでしょうか？
よろしくお願いいたします。


CC BY-SA 3.0
2016-08-30T01:43:50.233
28572
2016-08-30T07:45:11.220
18644
question
uikit uilabel
UILabelのsizeToFitを無効にするには？


「UILabelのサイズがリサイズされ」ているのかどうか、私は疑問を持ちますが、「表示している数字のフォントも微妙に左右に動」くのは、私の経験と一致しています。その原因は、「等幅フォントを使えば解決するのかも知れません」と推察なさっていることからおわかりのように、等幅でないプロポーショナルなフォントであるために、数字ひとつひとつの幅が異なることにあります。  
ですから、等幅フォントを使用するというのが、唯一にして最善の解決法になります。ただし、数字の幅が同じであればよく、全文字が等幅のフォントである必要はありません。  
とくにフォントを指定せず、システムフォントを使用するのなら、`UIFont`クラスのクラスメソッド`class func
monospacedDigitSystemFontOfSize(_ fontSize: CGFloat, weight weight: CGFloat)
-> UIFont`を使うといいでしょう。

_ViewControllerクラス内_

[code]

    override func viewDidLoad() {
        super.viewDidLoad()
    
        // digitLabelは、時刻を表示するラベル。
        digitLabel.font = UIFont.monospacedDigitSystemFontOfSize(55.0, weight: UIFontWeightBlack)
    }
    
[/code]

`55.0`はフォントサイズの指定。適宜指定してください。`UIFontWeightBlack`は、フォントのウェイト（太さ）の定数（Constant）。`UIFontDescriptor`のクラスリファレンス内に、全ウェイトのリストがあります。

[![iOSシミュレータ](https://i.stack.imgur.com/mnPkM.png)](https://i.stack.imgur.com/mnPkM.png)

iOSシミュレータによる、表示結果です。上はただのシステムフォント。下は「monospacedDigitSystemFont」です。数字の"1"の幅が異なることがわかります。


CC BY-SA 3.0
2016-08-30T07:45:11.220
28580
2016-08-30T07:45:11.220
18540
28572
answer