【发布时间】:2018-03-10 21:19:54
【问题描述】:
我目前正在尝试根据设备的方向更改堆栈视图上的轴。手机垂直时一切正常,但一旦我水平移动,我的限制就会打破。
目前,我在垂直堆栈视图中有蓝色视图和橙色视图。我将堆栈视图固定在超级视图的前缘、顶部和后缘。我将堆栈视图的底部固定到黑色视图。因为堆栈视图中的子视图不成比例,所以我将蓝色视图设置为 70 的恒定高度。 堆栈视图设置如下:
- 对齐 - 填充
- 分布 - 填充
- 轴 - 垂直
我发现将方向更改为水平时打破了我的限制,它是蓝色视图上设置的恒定高度。为了解决这个问题,我创建了一个蓝色视图高度约束的 IBOutlet。当手机旋转时,我正在停用约束:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
if UIDevice.current.orientation.isLandscape {
blueViewHeight.isActive = false
stackView.axis = .horizontal
} else {
blueViewHeight.isActive = true
stackView.axis = .vertical
}
}
这不起作用。我的约束仍然打破。然后我为蓝色视图创建了一个宽度约束(认为堆栈视图需要水平时的宽度)。我正在根据方向激活/停用蓝色视图的高度/宽度约束。唉,这也导致了约束被打破(换句话说,我的观点到处都是)。
我下面的图片是我想要实现的。我应该设置或不设置什么来获得所需的外观。
【问题讨论】:
-
我最终放弃了为此使用堆栈视图。我只是无法让它工作。相反,我创建了一个垂直约束和水平约束的列表。根据屏幕的方向,我激活/停用相应数组中包含的约束。
标签: ios swift swift4 uistackview