3

だから私はこれを自分で認識し、確認するためにこの答えを見つけました:

contentSizeForViewInPopover がアニメーションしないようにする

基本的に、表示する必要があるデータの量に応じて、ポップオーバーのサイズを動的に変更したいという点で、私は同様のボートに乗っています。また、ポップオーバー ビューが所定の位置に移動するこのアニメーション アクションも取得しています。問題は、テキスト ビューのコンテンツ ビューのサイズもポップオーバーのテキスト ビューのフレームも、viewDidAppear または viewDidLayoutSubviews が呼び出されるまでわからないため、呼び出し元/親でポップオーバーのコンテンツ サイズを設定できないことです。もちろん、この時点では手遅れです。ポップオーバーはすでに表示されているため、この不要なアニメーションが表示されます。

テキストビューが表示しているデータの量に合わせて、ポップオーバービューコントローラークラスのテキストビューのサイズを動的に設定しています。これは、フレームサイズが定義されている/既知の/どのように言いたい場合でも機能しますビューのライフサイクルでまだその時点に達していない場合。

私は自分のView Controllerを持っていて、ストーリーボードですべてを表示していることに言及する必要があります。

これは理にかなっていますか?うまく説明できていることを願っています。ヘルプや提案は大歓迎です。

EDITこれは、ポップオーバーにロードしているView ControllerからのviewDidLayoutSubviewsメソッドです-うまくいけば、これで明らかになります。これを初めてロードするときに、viewDidLayoutSubviews または viewDidAppear でこれを行わないと、2 つのテキスト ビューのフレームが CGRectZero になり、テキスト ビューがコンテンツに対して正しくサイズ変更されず、ポップオーバー サイズも正しくありません。

- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];

self.physicianDataNewValueTextView.text = self.physicianDataNewValue;
CGRect frame = self.physicianDataNewValueTextView.frame;
frame.size.height = self.physicianDataNewValueTextView.contentSize.height;
self.physicianDataNewValueTextView.frame = frame;

self.physicianDataOldValueTextView.text = self.physicianDataOldValue;
frame = self.physicianDataOldValueTextView.frame;
frame.size.height = self.physicianDataOldValueTextView.contentSize.height;
self.physicianDataOldValueTextView.frame = frame;

self.contentSizeForViewInPopover = CGSizeMake(384.0f, self.physicianDataOldValueTextView.frame.size.height + 75.0f);
}
4

1 に答える 1

2

そこで、委任を使用することにしました。ポップオーバーのビュー コントローラーでコンテンツ サイズをリセットする代わりに、デリゲート (ビュー コントローラーを含む) を新しいサイズで呼び出して、アニメーション プロパティを NO に設定して設定できるようにします。うまくいきます。

于 2013-05-14T17:40:57.667 に答える