0

iOS7でUITextView内に入力するときに行間隔/段落間隔を達成する方法を理解するのに役立つこの素晴らしい例に出くわしましたが、問題があり、まだ学習しているので、誰かが問題を解決するのを手伝ってくれることを願っていますTextKitについてお願いします。

これは実際の例です https://github.com/downie/DoubleSpacedTextView

2 つのファイルを添付しました:-

1- これは問題のビデオです:- http://1drv.ms/1o8Rpd2

2- これは私がテストしているプロジェクトです: http://1drv.ms/1o8RtK0

問題は、テキスト行の間に空白行 (少なくとも 2 行の空白行) があり、空白行の内側をクリックして UITextView をアクティブにし、キーボードを表示すると、テキストが上に移動するか、書式設定が失われることです。

これは私がオリジナルから少し変更したコア関数であり、書式設定を行います。完全に機能しますが、UITextView 内を初めてクリックしたときは機能しません:-

- (void) formatText
{
        __block CGFloat topOffset = 0;

        NSRange lineGlyphRange = [self.layoutManager glyphRangeForTextContainer:self.textContainer];

        [self.layoutManager 
         enumerateLineFragmentsForGlyphRange:lineGlyphRange usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer *textContainer, NSRange glyphRange, BOOL *stop)
         {
             CGRect adjustedRect = rect;
             CGRect adjustedUsedRect = usedRect;
             adjustedRect.origin.y = topOffset;
             adjustedUsedRect.origin.y = topOffset;

             [self.layoutManager setLineFragmentRect:adjustedRect forGlyphRange:glyphRange usedRect:adjustedUsedRect];

             topOffset += 30; // 30 is the space between the lines you can adjust this as you like
         }];

        CGRect adjustedExtraLineFragmentRect = self.layoutManager.extraLineFragmentRect;
        CGRect adjustedExtraLineFragmentUsedRect = self.layoutManager.extraLineFragmentUsedRect;
        adjustedExtraLineFragmentRect.origin.y = topOffset;
        adjustedExtraLineFragmentUsedRect.origin.y = topOffset;

        [self.layoutManager setExtraLineFragmentRect:adjustedExtraLineFragmentRect usedRect:adjustedExtraLineFragmentUsedRect textContainer:self.textContainer];
}

これを止めることができるかどうか見ていただけますか?UITextView に入力するときにテキストが常にフォーマットされるようにします。

TextKit または属性付きテキストを使用して、書式設定されたテキスト (行間隔付き) を UITextView に入力する方法を示す他の例はありますか?

iOS6以降、この問題に苦労しています。

ありがとう、

意思

4

1 に答える 1

1

完全な解決策はありません。解決策を探す場所のアイデアだけです。

すべてのレイアウト コードは、UITextView の textChange イベントから発生します。カーソルを移動しても、そのテキストの内容は変更されないため、そのコードは呼び出されません。ただし、textViewDidChangeSelection にアタッチしても問題は解決しません。

私はそれが次の2つのいずれかである可能性があると考えています:

  • NSLayoutManager は、空白行をテキスト行とは異なる方法で処理しています。これは、TextKit のバグであるか、呼び出されていない多くのデリゲート/メソッドの 1 つであることを意味します。
  • 空白行の rect 演算に関する何かが間違っています。行が空白の場合とそうでない場合のレイアウトの唯一の重要な違いは、lineFragmentRect の usedRect の幅が 0 であることですが、高さが 0 であるか、数学を台無しにしているオフセットが悪い可能性があります。何が原因なのかはよくわかりません。
于 2014-06-16T15:54:52.977 に答える