如何将UISwitch在堆栈视图中水平居中?

时间:2018-07-26 00:36:58

标签: ios interface-builder

我正在使用Interface Builder创建应用程序。我想安排一组标签和相应的UISwitch,以使所有标签都显示在屏幕的左半部分,而开关在右侧。开关应与标签对齐。

为此,我尝试使用一个垂直堆栈视图,其中嵌入了多个水平堆栈视图(每个标签/开关对一个水平堆栈视图)。为了使标签和开关正确对齐,我将它们分别设置在一个空白的UIView中,并将它们(开关和标签)居中在适当的UIView上。然后将“堆栈视图”设置为“居中”对齐和“均等填充”分布。

使用此设置,我得到了适当的视觉布局,但是即使每个父视图都设置了“已启用用户交互”,也无法激活UISwitch。如果我直接将开关移到水平“堆栈视图”中(没有将其嵌入空白UIView中),则它可以正常工作,但无法使它居中放置。

如何获得所需的布局并仍然具有可用的UISwitches?

我见过this question,但似乎没有任何答案可以解决我的问题。


要复制:

  1. 创建一个新的View Controller
  2. 添加垂直堆栈视图(VSV)
  3. 将VSV的约束设置为与View Controller的根视图相等的高度和宽度,并使其在水平和垂直方向上居中
  4. 将VSV的对齐方式设置为“居中”,并将分发方式设置为“均等填充”
  5. 向VSV添加1+个水平堆栈视图(HSV)
  6. 将每个HSV设置为“居中”对齐和“均等填充”分布
  7. 向每个HSV添加两个空白的UIView
  8. 对于每个HSV,将其宽度限制为与VSV相等
  9. 对于每个HSV,将UILabel添加到第一个UIView,并将UISwitch添加到第二个UIView
  10. 对于每个UILabel和UISwitch,限制其在其父级UIView上水平和垂直居中

运行应用程序时,布局是完美的。但是,即使每个连续的父视图都启用了用户交互,也无法与任何UISwitch进行交互。

我在Interface Builder中的层次结构:IB Hierarchy

其中开关不起作用的内置应用程序:Test Application

1 个答案:

答案 0 :(得分:1)

之所以不能与开关交互,是因为包含它的空白视图的高度为0。限制(空白)父视图的高度,以免将其调整为零或限制其大小。将顶部和底部切换到父级(值为0)。