質問: 時計アプリをつくっています。(針ではなくデジタル風の数字で表すタイプです。)UILabelをつかって時間を表示しているのですが、時間を表す数字が変わっていく度に、UILabelのサイズがリサイズされ、表示している数字のフォントも微妙に左右に動いてしまいます。iPhone等の時計アプリのように自然な感じしたいのですが、どうすればよいのでしょうか? sizeToFitが原因なのかな?と思っているのですが、ストーリーボードでUILabelを配置しただけで、コードで指示はしていません。等幅フォントを使えば解決するのかも知れませんが、そういうフォントは使用可能なのでしょうか? よろしくお願いいたします。
回答: 「UILabelのサイズがリサイズされ」ているのかどうか、私は疑問を持ちますが、「表示している数字のフォントも微妙に左右に動」くのは、私の経験と一致しています。その原因は、「等幅フォントを使えば解決するのかも知れません」と推察なさっていることからおわかりのように、等幅でないプロポーショナルなフォントであるために、数字ひとつひとつの幅が異なることにあります。 ですから、等幅フォントを使用するというのが、唯一にして最善の解決法になります。ただし、数字の幅が同じであればよく、全文字が等幅のフォントである必要はありません。 とくにフォントを指定せず、システムフォントを使用するのなら、`UIFont`クラスのクラスメソッド`class func monospacedDigitSystemFontOfSize(_ fontSize: CGFloat, weight weight: CGFloat) -> UIFont`を使うといいでしょう。 *ViewControllerクラス内* ``` override func viewDidLoad() { super.viewDidLoad() // digitLabelは、時刻を表示するラベル。 digitLabel.font = UIFont.monospacedDigitSystemFontOfSize(55.0, weight: UIFontWeightBlack) } ``` `55.0`はフォントサイズの指定。適宜指定してください。`UIFontWeightBlack`は、フォントのウェイト(太さ)の定数(Constant)。`UIFontDescriptor`のクラスリファレンス内に、全ウェイトのリストがあります。 !iOSシミュレータ iOSシミュレータによる、表示結果です。上はただのシステムフォント。下は「monospacedDigitSystemFont」です。数字の"1"の幅が異なることがわかります。