私のアプリには、太字、斜体、色などのボタンを提供し、NSAttributedString を生成してそれを UITextView の attributedText プロパティに設定することにより、書式設定されたテキストを表示するテキスト書式設定ツールが含まれています。ユーザーがテキストを選択してボタンをタップした後、UITextView の selectedRange プロパティを取得し、次に UITextView の現在の attributedText プロパティを取得し、選択した範囲に基づいてテキストに別の属性を追加し、attributedText プロパティに割り当てます。再びUITextViewの。
iOS 7 以降、テキストの書式設定がテキスト内の間違った場所に表示されるようになり、通常は数文字前に移動しました。いくつかのテストの後、これは空行の後でのみ発生し (たとえば、その後に 2 つの改行があるテキストの段落)、その前の空行ごとに書式設定が 1 文字ずつずれていることに気付きました。
さらにテストした結果、初めて attributedText プロパティを設定すると、2 つの改行のシーケンスが改行に変更され、次に「行区切り」文字 (Unicode 8232)、2 番目の改行に変更されることがわかりました。そのアクションの直前と直後に各文字の整数値を出力することからわかるように、新しい文字は間違いなく attributedText 割り当てによって追加されます。ただし、UITextView の selectedRange プロパティは行区切り文字を無視するため、返される範囲は正しくありません。
すぐに回答として追加する回避策を既に見つけました。他の誰かが問題を抱えている場合に備えて、主にこれを投稿しています。また、これをバグ 15349335 として Apple に報告しました。