ルビ付きのテキストをいい感じに表示させたくて色々試していたところ謎の挙動を発見したのでメモ
行をまたぐルビ付きのセグメントの処理が CoreText は該当するセグメント全体を次の行に送るように処理するようになっていて、その挙動自体自体は問題ないのですが後続する行の内容によって行を送る処理が発生したりしなかったりするようです
原因を探ろうと発生する/しないを切り分けてみたところ、以下のように後続する行に付くルビが短いと該当の処理が発生しないようでした
(ちなみに該当の行と後続する行との間には別の行が挟まっても同様の挙動をします)
解決しようと、いくつか思いつく手法を試してみましたが、結局 straightforward に解決することは断念し、
文字と glyph の対応関係は CoreText から取得できるので、ルビ付きのセグメントが行をまたいでいる場合は手動で改行を挟むようにすることで対応しました。
再現用のミニマムなプロジェクトを 上げておきます