gpt4 book ai didi

ios - 动态 UIStackView 与普通约束

转载 作者:行者123 更新时间:2023-11-30 12:35:43 33 4
gpt4 key购买 nike

我正在尝试使用 UIStackView 构建一个堆栈 View ,该 View 始终最多显示 3 个 View ,但也可以同时不显示、1 或 2 个 View 。

整个堆栈 View 应该是动态的。一开始堆栈 View 是空的。另一个函数将使用 stackView.insertArrangedSubview(at: 0) 在顶部添加一个新 View 。如果添加另一个 View ,则索引 0 处的前一个 View 应推送到索引 1。这就是我选择 UIStackView 的原因,因为它负责现有 View 的重新排序。

当第三个 View 被插入时,另外两个 View 将再次向下移动一个槽。现在,如果第四个 View 被插入,所有先前的三个 View 将再次向下移动,但第四个 View 将从堆栈 View 中删除。

这里有一个小的额外条件:

第一个索引处的 View 应始终是其余 2 个 View 大小的两倍。所以第一个 View 应该占整个堆栈 View 的 50%。因此,索引 1 和 2 处的 View 高度应为 25%。

如果插入新 View ,则当前位于索引 0 的 View 将必须缩小、向下移动到中间,并移动到堆栈 View 的索引 1。

这个想法类似于 Growl Notification System工作。

这个image显示 View 外观的基本布局。

现在的问题是,UIStackView 是解决此问题的正确方法还是仅使用约束(例如使用 SnapKit)是更好的方法?即使使用 UIStackView,我也可能需要有很多约束才能满足要求。

所以也许我应该有一个 addNewView 函数来更新所有约束并在 UIView.animate block 中调用 layoutIfNeeded 来进行转换一个 View 推倒其他 View 而最后一个 View 被推出?

大家觉得怎么样?如果存在一个已经做了类似事情的框架,我也将不胜感激。

最佳答案

这是一种选择。您需要一些代码来管理添加/删除 View ,但这应该不难。图片后面有注释:

enter image description here

首先将 View A、 View B 和 View C 放置到主视图上。不用担心大小或位置,也不给它们任何限制...StackView 将处理所有这些。

选择 B 和 C 并将它们嵌入到 Vertical StackView 中。 对齐:填充分布:均匀填充间距:8

接下来,选择 A 和刚刚创建的 StackView,并将它们嵌入到 Vertical StackView 中。还要使用 Alignment: FillDistribution: Fill EquallySpacing: 8

设置此 StackView

现在,选择这个新创建的 StackView - “最顶层”StackView - 并根据需要对其进行约束...这里我将leading、top、trailing 和bottom 全部设置为16。

现在,您只需要如下代码:

func addView(newView: UIView) -> Void {

// if ViewC has a subview, remove its subview
// if ViewB has a subview, move ViewB's subview to ViewC
// if ViewA has a subview, move ViewA's subview to ViewB
// add newView as a subview of ViewA

}

呃...试图真正澄清这一点... View A、B 和 C 将始终存在,正如您在此处看到的那样(具有清晰的背景,因此您实际上看不到它们)。当您添加/删除/移动"new" View 时,您将它们添加为 A、B 和 C 的 subview 。有意义吗?

关于ios - 动态 UIStackView 与普通约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42887580/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com