多くの入力フィールドを持つある種の「フォーム」を作成しています(テキストフィールド、スイッチ、ピッカーからの情報収集など)。
このフォームには 6 つのセクションがあり、一部の回答の性質はインターフェイスの残りの部分に影響を与えます (たとえば、車を所有していると選択すると、その下にさらに多くのオプションが表示されます)。
mainView
それを達成するために、 のサブビューである非常に大きなビュー ( ) の作成を開始しましたが、大きくUIScrollView
なりすぎたので、セクションごとに 1 つの nib ファイルを作成することにしました。各 nib ファイルのファイル所有者を my に設定し、MainFormViewController
各ビュー (section1View、section2View など) のアウトレットを作成します。セクション ビューを次の-viewDidLoad
ようにロードします。
// Section 1
UINib *nib1 = [UINib nibWithNibName:@"Section1" bundle:nil];
[nib1 instantiateWithOwner:self options:nil];
CGRect frame1 = self.section1View.frame;
frame1.origin.y = 10;
[self.section1View setFrame:frame1];
[self.mainView addSubview:self.section1View]; // mainView is the one I add to the scrollView
// Section 2 (goes 10px below section 1)
UINib *nib2 = [UINib nibWithNibName:@"Section2" bundle:nil];
[nib2 instantiateWithOwner:self options:nil];
CGRect frame2 = self.section2View.frame;
frame2.origin.y = frame1.origin.y + frame1.size.height + 10;
[self.section2View setFrame:frame2];
[self.mainView addSubview:self.section2View];
// Same approach for all other sections
// ...
これでうまくいくようですが、私の問題は、これらのセクション サブビューの高さを変更すると、残りのサブビューを高さの変更に適応させることができないことです。たとえば、最初のセクションの高さを変更すると:
CGRect mainFrame = self.mainView.frame;
CGRect section1Frame = self.section1View.frame;
section1Frame.size.height -= 150;
mainFrame.size.height -= 150;
[UIView animateWithDuration:0.3 animations:^(){
self.section1View.frame = section1Frame;
self.mainView.frame = mainFrame;
self.scrollView.contentSize = mainFrame.size;
} completion:^(BOOL finished){
//
}];
残りのビュー (section2View、section3View など)は、私が試した向きに関係なく、フレームの変更に「追従」しません。mainView
私の理解ではmainView
、サブビューの自動サイズ変更オプションに従って、のフレームを変更すると、そのサブビューのフレームに影響を与えるはずですよね? 私の場合、サブビューは同じ場所にとどまります。
Interface Builder のメイン ビューの [サブビューの自動サイズ変更] オプションが選択されています。
誰でもそれで私を助けることができますか?