【swift】半角全角を判定してフォントを使い分けてサイズとかも変更する【CoffeeNote開発記】
だいたいのローカライズが済んだときに申請前のテストでいじってたら、日本語のときにすげーださくなってるときに気付いた。
こんな感じ。
英語かっこいいのに、日本語だせぇ。。
ということでシステム設定言語に応じてフォントを切り替える設定をしてみようと思ったのだけど。
なんかstackoverflowとかでは対処法としてそのときの位置情報を取得する、ってのがあったけどそれだと設定してる言語とずれることがたびたび生じそうだったので、twitterでつぶやくと以下のようなリプライをいただいた。
@totu_iy //選択可能な言語設定の配列を取得
NSArray *langs = [NSLocale preferredLanguages];
//先頭の文字列を取得
NSString *currentLanguage = [langs objectAtIndex:0];
— Sohichiro (@sohichiro) 2014, 11月 24
返り値の配列の一つ目に設定している言語が返ってくるらしい。
ということでこれならできそう。
こんな記事も参考にしながら。
iOSの言語設定に応じて設定されるNSLocaleの値について簡単にまとめてみる - Qiita
...と思ったら
英語と日本語の混在する可能性もあることに気付いた。
その可能性を考慮したほうがいいと思ったので、 半角と全角を判定してフォントを切り替えるという方法をとることにした。
以下のサイトによると
- canBeConvertedToEncoding:
を使うといいと書いてあったので使ってみるけどswiftで書き換えてみたら、自分の実力不足のせいでうまくいかず笑
公式リファレンスをのぞいてみると
dataUsingEncoding:allowLossyConversion:
が代わりに推奨されていたのでそっちを使うことにした。
そしてソースは以下のような感じに。
// 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ごとにフォントを変えれるようにしてる。
フォントを変更してサイズを調整、あとフォントの違いを埋めるために透明度の調整もしてる。
画面はこんな感じに。
日本語のフォント
英語はめちゃくちゃ種類あるのだけど、日本語はイマイチぱっとくるフォントがなかった。。
以下から標準でインストールされてるフォントの一覧がみれる。
標準では4種類くらいしか日本語のフォントはない。どんまい。。