57

私は深刻な問題を抱えており、それを修正することはできないようで、この 2 日間、気が狂いそうになっています。いろいろと調べてみましたが、解決策が見つかりません。

私は のUITextView中に を持っていUIScrollViewます。スクロールビュー内のサイズを動的に変更しUITextViewてテキストを表示できます。しかし、UITextView非常に大きなテキストが含まれていると、ほとんど最後までスクロールすると途切れてしまいます。ただし、UIScrollViewのフレームはまだ正しくサイズ設定されています。

私はこれらの投稿を読みました: this thisおよび多くの同様の投稿。

UIScrollviewとは両方とも、UITextviewAutoLayout を使用して xib で作成されます。

これが私の現在のコードとスクリーンショットです。スクリーンショットの空白の場所はテキストで埋められるはずです。助けてください。

ここに画像の説明を入力

- (void)viewDidAppear:(BOOL)animated
{
    CGRect frame = self.longDescField.frame;
    frame.size.height = self.longDescField.contentSize.height;
    self.longDescField.frame = frame;

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width,  self.longDescField.contentSize.height + 200);
    self.scrollView.scrollEnabled = YES;
    [self.scrollView flashScrollIndicators];
}
4

17 に答える 17

139

この問題は iOS 7 から存在しており、iOS 12 でもまだ存在しています。

scrollEnabled = NOただし、 @igz が推奨するように、サイズ変更の前に設定することで、通常のスクロール動作を維持できませんでした。代わりに、スクロールを切り替えonoffサイズ変更した後

// Resize text view here

textView.scrollEnabled = NO;
textView.scrollEnabled = YES;

これにより、切り取られたテキストが正しくレンダリングされました。

于 2013-11-05T19:59:58.943 に答える
14

助けてくれてありがとう。これは最終的にiOS7で私のために働いたものです。

この特定の xib の自動レイアウトを無効にする必要がありました。

次に、次のことを行いました。

[textView setScrollEnabled:YES];
[textView setText:text];
[textView sizeToFit];
[textView setScrollEnabled:NO];
于 2013-11-22T00:48:47.603 に答える
12

私にとっての解決策はsizeToFit、textViewをカスタマイズした後に置くことでした

[self.yourTextView sizeToFit];

これは、テキストビューを操作するときに最後に行う必要があり、コンテンツ テキストを入力する前に行うべきではありません。

于 2015-08-07T21:36:36.943 に答える
7

恐るべしiOS7。xib と生成されたコードの両方で、サイズ変更されたすべての UITextView に同じ問題が適用されました。UITextView フレームが変更された後、textContainer.size を調整する必要があることがわかりました。

このカテゴリ コードは、textContainer.size を調整するために作成しましたが、テキスト値を設定した後にも調整が必要なようです。そのため、テキストの変更後にフレーム サイズを設定しない場合は、adjustAfterFrameChange を呼び出す必要があります。このコードは、UITextView が setFrame: 自体で何もしていないことを前提としているため、そのリスクを回避したい場合は、setFrame: を取り出して、adjustAfterFrameChange を手動で呼び出します。

編集:変更

self.textContainer.size = self.frame.size; // fix for cut off text

self.textContainer.size = self.contentSize; // fix for cut off text

@interface UITextView(Extras)

- (void)adjustAfterFrameChange;

@end



@implementation UITextView(Extras)

- (void)adjustAfterFrameChange {
#if defined(__IPHONE_7_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0
    if ([self respondsToSelector:@selector(textContainer)])
        self.textContainer.size = self.contentSize; // fix for cut off text
#endif
}


- (void)setFrame:(CGRect)frame {
    [super setFrame:frame];

    [self adjustAfterFrameChange];
}

@end
于 2013-11-18T22:47:31.177 に答える
2

UITextView の左半分または右半分が途切れていたことを除いて、同じ問題がありました。iOS 7 と iOS 6 の両方で、さまざまな電話で発生しました。呼び出し:

myTextView.scrollEnabled = NO;

in viewWillAppear は問題を回避しました。

于 2015-04-30T22:34:55.430 に答える
1

テキストビュー(スクロールビューなし)でも同じ問題があります。属性インスペクターで「スクロールを有効にする」のチェックを外すだけで、これを解決しました(Xcode 7.3.1、iOS 9.3)。

于 2016-06-25T13:17:10.950 に答える
1

これは、Interface Builder からもずっと発生します。

テキスト ビューが選択されている場合は、ユーティリティ インスペクターで [垂直インジケーターを表示] オプションのチェックを外します。トリミングされたテキストが表示されます。

于 2014-11-08T17:11:41.013 に答える