読者です 読者をやめる 読者になる 読者になる

【swift】半角全角を判定してフォントを使い分けてサイズとかも変更する【CoffeeNote開発記】

swift iOS CoffeeNote

だいたいのローカライズが済んだときに申請前のテストでいじってたら、日本語のときにすげーださくなってるときに気付いた。

こんな感じ。

photo 2.PNG

英語かっこいいのに、日本語だせぇ。。

ということでシステム設定言語に応じてフォントを切り替える設定をしてみようと思ったのだけど。

なんかstackoverflowとかでは対処法としてそのときの位置情報を取得する、ってのがあったけどそれだと設定してる言語とずれることがたびたび生じそうだったので、twitterでつぶやくと以下のようなリプライをいただいた。

返り値の配列の一つ目に設定している言語が返ってくるらしい。

ということでこれならできそう。

こんな記事も参考にしながら。

iOSの言語設定に応じて設定されるNSLocaleの値について簡単にまとめてみる - Qiita

...と思ったら

英語と日本語の混在する可能性もあることに気付いた。

その可能性を考慮したほうがいいと思ったので、 半角と全角を判定してフォントを切り替えるという方法をとることにした。

以下のサイトによると

NSString 半角・全角の判定 - Qiita

- canBeConvertedToEncoding:を使うといいと書いてあったので使ってみるけどswiftで書き換えてみたら、自分の実力不足のせいでうまくいかず笑

公式リファレンスをのぞいてみると dataUsingEncoding:allowLossyConversion:が代わりに推奨されていたのでそっちを使うことにした。

NSString Class Reference

そしてソースは以下のような感じに。

    // set propety font for title
    if ((cell.titleLabel.text?.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: false)) != nil) {
      cell.titleLabel.font = UIFont(name: "HelveticaNeue-UltraLight", size: 42.0)
    }else {
      cell.titleLabel.font = UIFont(name: "HiraKakuProN-W3", size: 32.0)
      cell.titleLabel.alpha = 0.8
    }

これをcellForRowAtIndexPathのメソッドの最後の部分に突っ込んでcellごとにフォントを変えれるようにしてる。

フォントを変更してサイズを調整、あとフォントの違いを埋めるために透明度の調整もしてる。

画面はこんな感じに。

photo 1.PNG

日本語のフォント

英語はめちゃくちゃ種類あるのだけど、日本語はイマイチぱっとくるフォントがなかった。。

以下から標準でインストールされてるフォントの一覧がみれる。

iOS 6:フォントリスト - Apple サポート

標準では4種類くらいしか日本語のフォントはない。どんまい。。