2

スクロールが無効になっている UITextView があり、ページカールトランジションを使用して内部のテキストを変更しています。これは私が使用しているコードです:

myView.text = nextString;

[UIView transitionWithView:myView duration:PAGE_CURL_DURATION options:UIViewAnimationOptionTransitionCurlDown animations:nil completion:nil];

新しいテキスト文字列が古いテキスト文字列よりも多くの行を持っている場合を除き、アニメーションが完了するまでクリップされます。アニメーション後に contentSize が変化しているように見えます。追加してみましmyView.contentSize = myView.bounds.size;たが、何も変わりませんでした。また、「サブビューのクリップ」を無効にして無駄にしました。

アニメ化直後はこんな感じ。 代替テキスト

しばらくすると、テキストは切り取られなくなります。

クリッピングを防ぐ方法はありますか?

4

3 に答える 3

2

簡単な方法は、Bjarne が言ったことを実行することです - clipsToBounds プロパティを使用します。ただし、注意してください。これにより、テキストが無期限に下向きに拡張されます。したがって、上限を設定するために境界にクリップするコンテナー ビューでテキスト フィールドを囲む必要もあります。

それでも問題が解決しない場合は、テキスト ビューの境界を手動で拡張し、新しいテキストが大きい場合はアニメーション化する前に位置を変更する必要があります。

テキストのサイズを取得するには、UIKit フレームワークの UIStringDrawing.h を確認してください。具体的には、次の使用を考えています: - (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode; UILineBreakModeWordWrap と一緒に。

サイズを取得する別の方法として、UILabel の次の関数があります。可能な限り最大のテキストビューの境界を渡します。

追加のクレジットとして、スムーズな移行のためにビューの境界の変化をアニメーション化することも検討してください。

于 2010-07-30T14:23:42.440 に答える
0

問題を解決する最も簡単な方法は、UITextView のプロパティ「clipsToBounds」を NO に設定することです。これにより、テキストビューがその境界の外に描画できるようになります

于 2010-07-28T18:21:49.857 に答える
0

これはかなり奇妙です。はコンテンツをクリップするのcontentSizeではなく、スクロール動作のみを決定する必要があります。ただし、アニメーション前からアニメーション後への変更はこれだけです。Clip Subviews のチェックを外すと、常にうまくいきました。

いくつかのオプション:

UITextView.frame最初に両方のテキストの最大を含めるのに十分な大きさだと思いますか? アニメーションが始まる直前に設定すると、手遅れになる可能性があります。[self performSelector(continueWithStuff:) withObject:object afterDelay:0.01]このような場合、アニメーションが初期状態を決定する前に、UI に変更を有効にするのに必要な時間を与えるため、驚異的なトリックを行います。

しかし、最も簡単な修正は、すべてのテキストに改行を追加することです。とにかくスクロールしていないので、これは問題になりません。

もう 1 つの角度は、アニメーション化UITextViewするにあなたを埋め込むことです。UIViewドキュメントを読むと、view引数は「遷移に関与するビューを含むコンテナー ビュー」である必要があります。この事実を無視すると、驚くべき結果が得られる可能性があります。

于 2010-07-26T16:05:39.723 に答える