Tweetbot:日本語テキストの行間について
Tweetbot
で指摘されている要改善点のひとつとして、日本語ツイートを表示した際の行間の広さ(英語オンリーのツイートに比して)、また日英混じりの場合の行間の広さのばらつきがあります(図参照 – クリックで拡大します)。
これに関しては開発元Tapbotsとやり取りを重ねて来ましたが、残念ながら今のところ、改善の見通しは立っていません。 近日中に嬉しいお知らせができるかもしれません。詳報をお待ちください(2011/07/05追記)。
詳しくは以下に。
この件については過去数回ツイートしたので、引用します;
俺はあくまで翻訳者なのでプログラミングのことはよくわからないのですが、iOSにはCore TextというAPIがあり、Tweetbotはそれを用いていると。で、Core Textを使うと行間がどうしてもああなってしまう、ということなんだそうで。
他にも、ツイートテキストの部分的コピーができないのもCore Textの現仕様に依存するものなんだそうです。
で、なぜCore Textを採用したかという理由については聞いていないのですが、おそらくそれなりの利点があってのことだと思います。さすがにその辺まで口出しするのはためらわれますので…
そう言われてみると、Tweetbotほど顕著ではないにしろ、Twitterrificにも確かに同様の傾向が見て取れます。
あと、Twitter for Macもおそらくそう。
Core Textでいろいろと検索していて引っかかったのがこれ。かなり前のものですけど、@novi_さんのこのツイートも気になるのですが…
で、デベロッパ用ドキュメントを読むガッツもないですし、これが本音です(^^; どなたかお知恵を。
【2011/06/13追記】
…というわけで、以下はAppleの中の人への要望です。
- Core Text APIに、フォント混在時に行間を揃えるためのオプションを用意してください。
- Helveticaとヒラギノ角ゴシックProNのアセンダ(or ディセンダ)を揃えてください。
2011/06/14 @ 13:40
そんなに詳しくはありませんが。
iPhoneではSystemフォントを指定する(しなくても)とフォントは、Helveticaになります。これは日本語環境でも同じです。それで日本語が入ると上記のように日本語部分にヒラギノが使われます。英語部分はHelveticaなので、行によって行間が違ってくるわけです。
解決策はフォント指定してもらって日本語環境では該当部分(UILabelとかUITextViewなどにテキストが入る)にヒラギノを使ってもらうことです。現状これ以外に解決策はないと思います。
iPhoneにはヒラギノの角ゴシックが2ウェイト(W3とW6)入っています。日本語はこの2書体です。iPadは明朝も入っていますが。
HiraKakuProN-W3
HiraKakuProN-W6
CoreTextがあるとPagesのようにスタイルが付けられるはずですが、ほとんど開発者には公開されていません。現状は実力のある開発者しか使えません。
CoreTextはPages(初代iPad)が出た3.2以降で使われていると思います。
行間(実際には文字の高さ)を調べるプロパティ?はあるのに指定ができません。
この仕様はほとんどバグと思います。
よろしくお願いします。
2011/06/14 @ 15:42
> 大西様
コメント&解説ありがとうございます。だいたい当方の理解と合致しているので安心しました^^;
2011/06/17 @ 16:19
前に作っていたTweetParakeetはCoreTextで実装しています。
もちろん日本語のバグというか仕様があるので、結局それは
行間のコントロールを自分で実装しました。
行はCoreTextにレンダリングしてもらって、それを自分でならべてパラグラフにします。
たしかMacのほうでも同様のことがあって、例えばCotEditorでも起こります。
環境設定→フォーマット→複合フォントでも行高を固定する というオプションです。
フォントをMenloなど(つまり日本語はヒラギノで表示されて複合フォントになる)にして、
このオプションをOFFでCoreTextと同じ問題が出ます。
CotEditorはソースが公開されているので見てみるといいと思います。
それでCoreTextだとどうするかというと、
複合フォントならば行高(=アセント)はどちらかが高くなるはずなので(一般には和文フォント)、
高いほうに固定してしまえば、ちゃんと並ぶはずです。
CoreTextのAttributedStringで行高の固定はできたかは忘れてしまいましたが、
自分で実装してもいいと思います。
行間も固定で自分でコントロールしたほうがいいと思います。
2011/06/17 @ 18:46
> novi様
コメントありがとうございます。
CotEditorの件、さっそくTapbotsに参考としてフィードバックしてみました。
2011/08/04 @ 11:32
その後、大筋ではありますが行間を調整する方法が判明しました。@novi_さんに感謝。
CoreTextの日本語行間の問題(解決)
novis.jimdo.com/2011/07/02/coretext%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A1%8C%E9%96%93%E3%81%AE%E5%95%8F%E9%A1%8C-%E8%A7%A3%E6%B1%BA/
バージョン1.4.3にて再調整しましたが、細部の詰めはまだまだ。今後方法を探りつつ、適宜微調整を重ねる方向で考えています。
[BLOCKED BY STBV] Core Text APIを使用した際に起こる行間の問題について » Nullified Construction
2011/12/20 @ 00:26
[…] て日本語をレンダリングする際に、行間が英数文字と比べると異様に広くなる問題があります。詳しくは E-WA’s Blog – Tweetbot:日本語テキストの行間について で説明されています。 […]
iOS開発:OHAttributedLabelの行間を調整する
2012/09/02 @ 08:54
[…] Tweetbot:日本語テキストの行間について | E-WA’s Blog […]