如何移动 UIView 并使用 Swift 以编程方式放置新的 UIView?

Posted

技术标签:

【中文标题】如何移动 UIView 并使用 Swift 以编程方式放置新的 UIView?【英文标题】:How to shift UIView's and put a new UIView programmatically with Swift? 【发布时间】:2018-09-03 16:21:05 【问题描述】:

我的数据有一个布局,但我需要根据数据更改视图的位置。我想在屏幕顶部放置一个 UIView (UILabel, UITextField ...) 并将布局向下移动,但我不知道该怎么做,我看到了一些文档和教程,但对我没有帮助。我用故事板制作了我的屏幕。

这是原始画面:

这就是我想要的:

我的故事板:

【问题讨论】:

您应该为此使用 tableview 并在需要时在顶部插入一行。 这是个好主意,但在这种情况下,我想添加一个新的 UIView 而且UITableViewCell 也是UIView,您可以将视图放在单元格的内容视图中。或者,如果您想在 tableView 的顶部添加您的视图,您还可以将您的视图设置为您的 tableViewtableHeaderView 属性 我没有 UITableView,而是有 Views 和 StackView,就像显示第三张图片一样。我很欣赏这个提示,但这个项目正在这样做。 抱歉,被屏幕截图上的文字Table View弄糊涂了。如果将显示堆栈视图的子视图,则此(第三个)屏幕截图可能会更有用。我已将我的建议作为答案假设(根据您的最后评论)所有可见的视图都由堆栈视图排列,您想要做的是在堆栈视图的顶部再添加一个视图 【参考方案1】:

如果您只想在堆栈视图的顶部添加视图,请使用stackView.insertArrangedSubview(newView, at:0)

【讨论】:

StackView 是三个 UIView 之一 那么其他 2 个视图是什么?以及为什么它们不能也按堆栈视图排列? 你好吧,但这是我的第一个应用程序,所以我做了这个,现在我遇到了这个问题。【参考方案2】:

我建议您在屏幕上设置“在此处放置其他视图”,并对该视图设置固定高度限制。使下面的视图在“other view here view”的底部有一个固定的空间。

然后从“将其他视图放在此处”的高度约束中按住 Control 并拖动到您的视图控制器中。这将使约束成为一个出口。

现在编辑高度约束并将其设置为 0。这会将视图折叠到 0 高度,导致它消失,而其他视图向上移动。

然后,在代码中,当您希望显示“此处的其他视图”视图时,使用插座将该视图上的常量设置回其先前的非零值,然后在父级上调用 layoutIfNeeded() view 根据更改的约束更新视图布局。

您还可以编写将“此处的其他视图”视图插入视图层次结构的代码,但这将涉及在代码中删除约束和添加约束,这有点麻烦。

通过调整视图的高度限制,您可以毫不费力地来回显示/隐藏它。

【讨论】:

以上是关于如何移动 UIView 并使用 Swift 以编程方式放置新的 UIView?的主要内容,如果未能解决你的问题,请参考以下文章