【问题标题】:Dynamic scrollView size for variable content可变内容的动态滚动视图大小
【发布时间】:2016-12-24 08:54:11
【问题描述】:

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

在此布局中,您会看到一个滚动视图,顶部始终具有相同的内容,底部有一些框。这些框应该是可变的,所以我希望它们中的一些被关闭而一些被打开。我已经尝试说诸如 mapBox.hidden = true 或 mapBox.removeFromSuperview() 之类的内容。

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

我已经在 Android 上做过了,你可以给它们的盒子只留一个边距,当你把 dem 隐藏起来时,下面的盒子只有它的边距到隐藏盒子顶部的任何东西。

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

我希望你能读懂我可能难以理解的英语并给我一个提示。

【问题讨论】:

  • 这些框在可见时是否具有固定(预定义)的高度?
  • 不,不是我设置的。它们也应该因内容而异。

标签: ios swift layout uiscrollview storyboard


【解决方案1】:

您可能知道这里的大问题是基本设计。正如@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
}

注意:这种方法只需要重叠你的框即可。那些盒子仍然存在。您可能希望隐藏它们以防止被用户看到。

【讨论】:

【解决方案2】:

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

【讨论】:

  • 是的,好主意。但是我在整个布局中还有一些其他视图和按钮,我没有在我的 Layoutpicture 上显示,以便您更容易理解。我认为当我尝试用它制作一个 tableView 时它会变得更加复杂。
猜你喜欢
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多