如何移动 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 以编程方式使用交替条纹图案填充 UIView?

如何使用 Swift 以编程方式添加约束

如何以编程方式将自定义 uiview 添加到视图控制器 SWIFT

以编程方式将 UIScrollView 滚动到 Swift 中的子 UIView(子视图)的顶部

以编程方式在 UIView 上添加 UITextField Swift

如何在 Swift 中以编程方式从 UIView 中删除安全区域?