自动调整从nib加载的子视图时出现意外行为

phi*_*phi 4 uiview ios autoresizingmask uinib

我正在制作某种带有许多输入字段的"表单"(一些是文本字段,一些是开关,一些是从拾取器收集信息等).
这种形式有6个部分,某些答案的性质会影响界面的其余部分(例如,如果您选择拥有汽车,则会在下面显示更多选项).

为了实现这一点,我开始制作一个非常大的视图(mainView),UIScrollView它是a的子视图,但它变得太大,所以我决定为每个部分创建一个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
// ...
Run Code Online (Sandbox Code Playgroud)

现在这似乎工作正常,但我的问题是,当我更改这些部分子视图的高度时,我无法让其余的子视图适应高度变化.例如,如果我更改第一部分的高度:

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){
    //
}];
Run Code Online (Sandbox Code Playgroud)

其余的视图(section2View,section3View等)不会 "跟随" mainView我所尝试的方向的框架中的更改.根据我的理解,mainView根据子视图的自动调整选项,更改框架应该影响其子视图的框架,对吗?在我的情况下,子视图只是停留在同一个地方.
选择Interface Builder中主视图的"Autoresize Subviews"选项.

有人可以帮我解决这个问题吗?

Sul*_*han 5

你是否期望其他部分增加150pxs?我认为没有可以实现这一目标的自动调整掩模.

如果你section2View有固定的上边距,即使它的超级视图的大小改变它也不会移动.如果它的上边距是灵活的并且底部边距是灵活的,它将移动,但只有75pxs.如果只有上边距是灵活的,它将正确向上移动,但只有在第1部分更改时才会起作用.

简介: 在更改其中一个部分的大小时,您必须手动修复所有部分的位置.如果你将这些部分放入NSArray,它将变得非常简单.

或者更好 - 使用UITableView适合这种情况的一个.