可变内容的动态scrollView大小

时间:2016-08-17 15:44:16

标签: ios swift layout uiscrollview storyboard

我站在一个新问题面前。我的故事板中有以下布局。

layout

在此布局中,您会看到一个scrollView,其顶部始终具有相同的内容,底部则显示一些框。这些盒子应该是可变的,所以我希望它们中的一些关闭,一些打开。我已经试着说像mapBox.hidden = true或mapBox.removeFromSuperview()。

问题是,如果我这样做,那个盒子是隐藏的,但它的空间总是在那里,因为我认为有限制。

我已经在Android上完成了它,在那里你可以给它们盒子只是一个边缘,当你隐藏时,下面的盒子只有它隐藏在隐藏盒子顶部的任何边缘。

我想要的是打开和关闭某些方框的可能性,所有未隐藏的方框和滚动视图之间的距离始终相同,其内容与其内容一样大。

我希望你能读懂我可能无法理解的英语,并能给我一些提示。

2 个答案:

答案 0 :(得分:0)

你可以在这里做些什么:使整个布局成为一个桌面视图。然后,可以将顶部(始终保持不变)添加为表头。 mapbox和标题框都是表格单元格(使用自定义XIB文件)。然后,您可以使用一个数组来表示哪些框以及您要显示的其他单元格,并根据具体情况更新该数组。表视图将根据内容大小调整其滚动视图的大小。

答案 1 :(得分:0)

你可能知道这里的大问题是基本设计。正如@IanRichard所说,这应该使用表格视图来完成。但是,如果没有别的办法,你仍然可以做一些解决方法。

您可以通过这种方式设置约束,以便"不受欢迎的"视图被隐藏。这是textBox和mapBox的一个示例,但可以对所有框使用相同的内容:

你可能有一个约束连接textBox的底部和mapBox的顶部,优先级可能是1000.将此优先级更改为999.然后再添加一个约束连接textBox的TOP和mapBox的TOP 。将优先级设置为1并将常量设置为0.接下来,以与为其他视图元素建立出口连接相同的方式,为这两个约束创建两个出口连接。您将在以后切换优先级时需要它们。

以下是您的商店的样子:

IBOutlet var myConstraintBotTop  : NSLayoutConstraint!
IBOutlet var myConstraintTopTop  : NSLayoutConstraint!

然后在您的代码中,您可以"关闭您的观点"只需设置适当的约束:

func turnOffMyBox() {
    myConstraintBotTop.priority = 1
    myConstraintTopTop.priority = 999
}

这里的反转版本是"打开"万一你需要它:

func turnOffMyBox() {
    myConstraintBotTop.priority = 999
    myConstraintTopTop.priority = 1
}

注意:此方法仅通过重叠框来实现。那些盒子仍然存在。您可能希望隐藏它们以防止用户看到它。