I am making some sort of "form" with many input fields (some are textfields, some are switches, some gather info from pickers etc).
There are 6 sections in this form, and the nature of some answers influences the rest of the interface (for example, if you select that you own a car, more options will show below that).
In order to accomplish that, I started making a very large view (mainView
) that is subview of a UIScrollView
, however it was getting too big so I decided to create one nib file for each section. I set the file owner of each nib file to my MainFormViewController
, and then I create an outlet for each view: section1View, section2View etc. I load the section views in -viewDidLoad
like this:
// 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
// ...
Now this seems to work fine, however my problem is that when I change the height of these section subviews, I can't get the rest of the subviews to adapt to the height change. For example, if I change the height of the first section:
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){
//
}];
The rest of the views (section2View, section3View etc) do not "follow" the change in the frame of the mainView
, whatever orientation I tried. To my understanding, changing the frame of the mainView
should influence the frame of its subviews, according to the subviews' autoresizing options, right? In my case the subviews just stay in the same place.
The "Autoresize Subviews" option of the main view in Interface Builder is selected.
Can anybody help me out with that?