【发布时间】:2018-05-20 02:01:46
【问题描述】:
我正在使用UIStackView 在我的一个 tableview 单元 xib 中进行布局,以便更轻松地调整大小,并且我还使用大小类,因为手机和平板电脑之间存在布局差异。
由于某种原因,我必须为每个尺寸类别使用不同的堆栈视图。对 iPhone 说 stackview1,对 iPad 说 stackview2。现在我已经将label1 移动到 iPhone 尺寸级别的 stackview1 中,切换到 iPad 尺寸级别并想将 label1 从 stackview1 移动到 stackview2(它是灰色的)。但是一旦我这样做并切换回 iPhone 尺寸等级,Label1 就会从stackview1 中移出,iPhone 布局就会搞砸。
想知道是否有人以前遇到过这种情况并得到任何解决方案?
更新
为了进一步澄清,
我完全通过约束实现了以下两个布局,同事说服我,使用 UIStackView 的布局可以更容易地适应 UI 变化。例如,在下面的布局中,
label1和label3之间有一个距离约束 (12),如果我希望label3向上移动一次label1和label2被隐藏/无,我将有手动将距离约束设置为 0。如果通过UIStackView,将label1和label2设置为隐藏,我们都设置好了。这只是一个例子,这样的变化还有很多。我之所以需要不同的
UIStackView是因为设计上的差异。
【问题讨论】:
-
这听起来不像是你将能够使用 nib 中的“为特征而变化”功能来配置的东西——至少,不是你描述它的方式。当特征集合更改时,您可能必须执行代码更改。或者你可以解释一下为什么你需要一个不同的堆栈视图来为每个尺寸等级?如果你问我,那就是难闻的气味。
-
@matt 我已经用更多信息更新了我的问题。希望它能向您解释为什么我需要为每个尺寸类使用不同的 stackview。
-
我的布局也有类似的问题——不同特征集合的堆栈视图层次结构不同。我没有在堆栈视图之间移动子视图,而是考虑在每个堆栈视图中复制子视图(在您的案例标签中),并隐藏/显示适用于当前特征集合的那些子视图。可能使用
willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator)。 -
更新:我最终使用了 2 个不同的 .xib 文件,一个用于紧凑宽度,一个用于常规宽度。这样就可以有完全不同的布局,尤其是当约束不够时。
标签: ios iphone swift ipad uistackview