这种形式有6个部分,某些答案的性质会影响界面的其余部分(例如,如果您选择拥有汽车,则会在下面显示更多选项).
为了实现这一点,我开始制作一个非常大的视图(mainVIEw),它是UIScrollVIEw的子视图,但是它太大了所以我决定为每个部分创建一个nib文件.我将每个nib文件的文件所有者设置为我的MainFormVIEwController,然后为每个视图创建一个插座:section1VIEw,section2VIEw等.我在-vIEwDIDLoad中加载剖面视图,如下所示:
// Section 1UINib *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”选项.
有人可以帮我解决这个问题吗?
解决方法 你是否期望其他部分增加150pxs?我认为没有可以实现这一目标的自动调整掩模.如果您的section2VIEw具有固定的上边距,即使其超视图的大小发生更改,它也不会移动.如果它的上边距是灵活的并且底部边距是灵活的,它将移动,但只有75pxs.如果只有上边距是灵活的,它将正确向上移动,但只有在第1部分更改时才会起作用.
摘要:
在更改其中一个部分的大小时,您必须手动修复所有部分的位置.
如果将这些部分放入NSArray中,它将变得非常简单.
或者更好 – 使用适合这种情况的UItableVIEw.
总结以上是内存溢出为你收集整理的ios – 自动调整从nib加载的子视图时出现意外行为全部内容,希望文章能够帮你解决ios – 自动调整从nib加载的子视图时出现意外行为所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)