gpt4 book ai didi

ios - 自动调整从 nib 加载的 subview 时的意外行为

转载 作者:可可西里 更新时间:2023-11-01 05:10:14 24 4
gpt4 key购买 nike

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

为了实现这一点,我开始制作一个非常大的 View (mainView),它是 UIScrollView 的 subview ,但是它变得太大了,所以我决定为每个部分创建一个 nib 文件。我将每个 nib 文件的文件所有者设置为我的 MainFormViewController,然后我为每个 View 创建一个导出:section1View、section2View 等。我在 -viewDidLoad 中加载部分 View 像这样:

// 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
// ...

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

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){
//
}];

其余的 View (section2View、section3View 等)不要“跟随”mainView 框架中的变化,无论我尝试过什么方向。据我了解,根据 subview 的自动调整选项,更改 mainView 的框架应该会影响其 subview 的框架,对吧?在我的例子中, subview 只是停留在同一个地方。
Interface Builder 中主视图的“Autoresize Subviews”选项被选中。

谁能帮我解决这个问题?

最佳答案

您是否希望其他部分增加 150 像素?我认为没有可以实现此目的的自动调整大小掩码。

如果您的 section2View 具有固定的上边距,即使其父 View 的大小发生变化,它也不会移动。如果它的 top margin 是 flexible 和 bottom margin 是 flexible,它会移动,但只有 75pxs。如果只有上边距是灵活的,它会正确向上移动,但只有当第 1 部分发生变化时才会起作用。

总结:在更改其中一个部分的大小时,您必须手动固定所有部分的位置。如果您将这些部分放入 NSArray 中,它将变得非常容易。

或者更好 - 使用非常适合这种情况的 UITableView

关于ios - 自动调整从 nib 加载的 subview 时的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9920412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com