4

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

为了实现这一点,我开始制作一个非常大的视图 ( mainView),它是 a 的子视图UIScrollView,但是它变得太大了,所以我决定为每个部分创建一个 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 中主视图的“Autoresize Subviews”选项被选中。

任何人都可以帮我解决这个问题吗?

4

3 回答 3

5

您是否期望其他部分上升 150 像素?我认为没有自动调整大小的面具可以做到这一点。

如果您section2View有固定的上边距,即使它的超级视图的大小发生变化,它也不会移动。如果它的上边距是灵活的,而下边距是灵活的,它会移动,但只有 75pxs。如果只有上边距是灵活的,它会正确向上移动,但只有在更改第 1 部分时才会起作用。

摘要: 在更改其中一个部分的大小时,您必须手动修复所有部分的位置。如果将这些部分放入 aNSArray中,它将变得非常容易。

或者更好 - 使用最UITableView适合这种情况的 a 。

于 2012-04-04T14:35:15.737 回答
3

从 nib 加载视图不应该有任何自动调整大小的问题。我怀疑您的自动调整大小蒙版不正确。

话虽如此,我整理了一个示例项目来测试它。我不知道你到底想要什么影响,但我把样本放在github上,这样你就可以看看它是否能帮助你解决你的问题。

https://github.com/jdecarlo/StackOverflow9920412

如果示例不能帮助您解决问题,请在此答案中添加注释,解释原因,我将对其进行修改。

于 2012-04-04T14:21:49.853 回答
1

您确定自动调整大小的蒙版设置正确吗?要检查这一点,请在创建所有视图和子视图在某处使用断点,然后在 GDB 窗口中键入以下命令:

po [[self mainView] recursiveDescription]

它将向您展示视图和子视图的整个层次结构以及它们的所有框架和自动调整大小的掩码。

于 2012-04-02T21:28:57.683 回答