1

AUIScrollViewには 5UIView秒が含まれます。基本的に、ユーザーが のいずれかに触れたときに、それらを展開および折りたたみたいと考えていますUIView

展開するアニメーションのコードglobalPressReleasesView:

            [UIView beginAnimations:@"Expand" context:nil];
            [UIView setAnimationDuration:1.0];
            [UIView setAnimationDelegate:self];

                                [globalPressReleasesView setFrame:CGRectMake(globalPressReleasesView.frame.origin.x, globalPressReleasesView.frame.origin.y, globalPressReleasesView.frame.size.width, globalPressReleasesView.frame.size.height + [globalPressReleasesArray count]*105)];

                                [financialPressReleasesView setFrame:CGRectMake(financialPressReleasesView.frame.origin.x, financialPressReleasesView.frame.origin.y + [globalPressReleasesArray count]*105, financialPressReleasesView.frame.size.width, financialPressReleasesView.frame.size.height)];


                                [newOnCscView setFrame:CGRectMake(newOnCscView.frame.origin.x, newOnCscView.frame.origin.y + [globalPressReleasesArray count]*105, newOnCscView.frame.size.width, newOnCscView.frame.size.height)];

                                [latestEventsView setFrame:CGRectMake(latestEventsView.frame.origin.x, latestEventsView.frame.origin.y + [globalPressReleasesArray count]*105, latestEventsView.frame.size.width, latestEventsView.frame.size.height)];

                                [latestCaseStudiesView setFrame:CGRectMake(latestCaseStudiesView.frame.origin.x, latestCaseStudiesView.frame.origin.y + [globalPressReleasesArray count]*105, latestCaseStudiesView.frame.size.width, latestCaseStudiesView.frame.size.height)];

                                [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height + [globalPressReleasesArray count]*105)];

            [UIView commitAnimations];

その他の xib プロパティ:

それぞれUIView切り取られた scrollview.autoresize = YES

問題:

「globalPressReleasesView」は完全に展開しますが、スクロールするとscrollview. globalPressReleasesViewフレームは、xib で定義された元のフレーム値に自身をリセットします。

誰かが問題が何であるかを推測できますか?

4

1 に答える 1

3

まず、コードを少し単純化しましょう。

CGFloat heightDifference = [globalPressReleasesArray count] * 105.0f;

CGRect globalPressReleasesViewFrame = globalPressReleasesView.frame;
globalPressReleasesViewFrame.size.height += heightDifference;
globalPressReleasesView.frame = globalPressReleasesViewFrame;

NSArray* movedViews = @[financialPressReleasesView, newOnCscView, latestEventsView, latestCaseStudiesView];

for (UIView* movedView in movedViews) {
   CGRect movedViewFrame = movedView.frame;
   movedViewFrame.origin.y += heightDifference;
   movedView.frame = movedViewFrame
}

CGSize contentSize = scrollView.frame.size;
contentSize.height += heightDifference;
[scrollView setContentSize:contentSize];

これで、コードが何をするのかが非常に明確になりました。

コードは完全に正しいようです。NSLogフレーム (またはブレークポイント)を設定している値を確認することをお勧めします。

ビュー フレームを変更する方法は 2 つしかないことに注意してください。1.コード2で変更します。先祖のフレームを変更したため(またはユーザーが縦/横モードを切り替えたとき)、自動サイズ変更されます。

于 2013-03-29T15:29:44.417 に答える