質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

8934閲覧

sizeToFitするとテキストが切れるフォントがあります

komeo

総合スコア9

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

1クリップ

投稿2016/03/29 06:27

やりたい事はフォント一覧のピッカーを出して
選択したフォントを都度フィットしたサイズで表示したいと思っております

テスト段階として先ず
大きめのUILabelを用意して文字色、背景色を指定しました。

次に
テキスト及びフォント、サイズも指定してsizeToFit()したところ
上が切れてしまいました。

Damascusというフォントです。
逆に、
Futura-Mediumなどでは下が切れる・・というよりピッタリ?になります。

どの種類のフォントでも上下中央に均等に揃える事は可能なんでしょうか。

何卒よろしくお願い致します

イメージ説明

swift

1 let txt = "あいう ABC defg 123\nかきく XYZ opqr 098" 2 let size = CGFloat(30.0) 3 4 let label = UILabel(frame: CGRectMake(10,50,UIScreen.mainScreen().bounds.width,UIScreen.mainScreen().bounds.height)) 5 label.backgroundColor = UIColor.blackColor() 6 label.textColor = UIColor.whiteColor() 7 label.numberOfLines = 0 8 label.text = txt 9 label.font = UIFont(name:"Damascus",size:size) 10 label.sizeToFit() 11 self.view.addSubview(label) 12 13 let label2 = UILabel(frame: CGRectMake(10,200,UIScreen.mainScreen().bounds.width,UIScreen.mainScreen().bounds.height)) 14 label2.backgroundColor = UIColor.blackColor() 15 label2.textColor = UIColor.whiteColor() 16 label2.numberOfLines = 0 17 label2.text = txt 18 label2.font = UIFont(name:"Futura-Medium",size:size) 19 label2.sizeToFit() 20 self.view.addSubview(label2) 21

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Stripe

2016/03/29 15:42

Damascusはアラビア文字のフォントですが?それでひらがなやアルファベットを表示させるつもりなんですか?
komeo

2016/03/29 23:21

言葉足らずで申し訳ありません。 日本語を入れたのは飽くまでテストとしてです。 よろしくお願い致します。
guest

回答1

0

ベストアンサー

Damascusフォントは、本来アラビア文字を表示するためのフォントだと思います。(シリアの首都ダマスカスに由来した名前だと思います。)
(参考)
http://www.fonts.com/ja/font/diwan-software/damascus

それで、アラビア文字をきれいに表示するためにベースラインの下側(descender)が大きめで、上側(ascender)が小さめの配置になっており、アルファベット等アラビア文字でないものを表示すると、Damascusでない別の(アルファベット文字が定義されている)フォントの字形が自動利用され、それをDamascusのascenderサイズで表示して、上側がはみ出してしまうのだと思います。
なお、上側が切れているように見えるのは、文字色をベース背景と同じ白にしているためで、白以外にすればはみ出した状態でも文字全体が表示されるはずです。さらにラベル背景色の黒を透明にすれば、はみ出していることもわからず、多少上にずれている程度に見えるはずです。

Futuraフォントは、あえて下側ギリギリまで使用する字形のフォントなのだと思います。違和感があるのはやはり背景色と同じ白で文字を表示しているからだと思います。

どの種類のフォントでも上下中央に均等に揃える事は可能なんでしょうか。

UIFontのascenderプロパティやdescenderプロパティを見て、英数字が中央に表示されるよう調整することはできると思いますが、そうすると、今度はDamascusフォントで本来のアラビア文字を表示した時に下にずれることになると思います。
おそらくフォント名を英字で表示する時に、そのフォントを使って表示したいだけなのだと思いますが、そもそもDamuscusフォントは英字が定義されてなくて代替フォントが表示されているだけなので、あまりこだわっても仕方ないかと思います。

対処案としては、以下のいずれかかなと思います。

  • label.sizeToFit()でサイズを調整した後、label.frame.size.height += 10としてラベルの高さを増やして上下に余白を作る。
  • Damascus等、英字を表示するとずれることがわかっているフォントは、システムフォントでフォント名を表示する。

投稿2016/03/29 17:34

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

komeo

2016/03/29 23:25

ありがとうございます! そういうことですね。大変良く分かりました。 そもそもフォントに対する知識、認識が足りませんでした。。 反省して勉強します、、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問