質問: UIFont(name:"Futura-Medium",size:size) label2.sizeToFit() self.view.addSubview(label2) ```
回答: Damascusフォントは、本来アラビア文字を表示するためのフォントだと思います。(シリアの首都ダマスカスに由来した名前だと思います。) (参考) それで、アラビア文字をきれいに表示するためにベースラインの下側(descender)が大きめで、上側(ascender)が小さめの配置になっており、アルファベット等アラビア文字でないものを表示すると、Damascusでない別の(アルファベット文字が定義されている)フォントの字形が自動利用され、それをDamascusのascenderサイズで表示して、上側がはみ出してしまうのだと思います。 なお、上側が切れているように見えるのは、文字色をベース背景と同じ白にしているためで、白以外にすればはみ出した状態でも文字全体が表示されるはずです。さらにラベル背景色の黒を透明にすれば、はみ出していることもわからず、多少上にずれている程度に見えるはずです。 Futuraフォントは、あえて下側ギリギリまで使用する字形のフォントなのだと思います。違和感があるのはやはり背景色と同じ白で文字を表示しているからだと思います。 > > どの種類のフォントでも上下中央に均等に揃える事は可能なんでしょうか。 > > > UIFontのascenderプロパティやdescenderプロパティを見て、英数字が中央に表示されるよう調整することはできると思いますが、そうすると、今度はDamascusフォントで本来のアラビア文字を表示した時に下にずれることになると思います。 おそらくフォント名を英字で表示する時に、そのフォントを使って表示したいだけなのだと思いますが、そもそもDamuscusフォントは英字が定義されてなくて代替フォントが表示されているだけなので、あまりこだわっても仕方ないかと思います。 対処案としては、以下のいずれかかなと思います。 * `label.sizeToFit()`でサイズを調整した後、`label.frame.size.height += 10`としてラベルの高さを増やして上下に余白を作る。 * Damascus等、英字を表示するとずれることがわかっているフォントは、システムフォントでフォント名を表示する。