如何在堆栈视图中水平居中 UISwitch?
How do I horizontally center a UISwitch in a stack view?
我正在使用 Interface Builder 创建应用程序。我想安排一组标签和相应的 UISwitch,以便所有标签都显示在屏幕的左半部分,而开关则在右侧。开关应与标签对齐。
为此,我尝试使用垂直堆栈视图,其中嵌入了多个水平堆栈视图(每 label/switch 对一个水平堆栈视图)。为了正确对齐标签和开关,我将它们中的每一个都设置在一个空白的 UIView 中,并将它们(开关和标签)居中放置在相应的 UIView 上。然后将堆栈视图设置为 "Center" 对齐和 "Fill Equally" 分布。
通过此设置,我获得了适当的视觉布局,但即使每个父视图都设置了 "User Interaction Enabled",也无法激活 UISwitch。如果我将开关直接移动到水平堆栈视图中(没有将其嵌入空白 UIView 中),它可以正常工作,但我无法按照我想要的方式将其居中。
我怎样才能拥有我想要的布局并且仍然具有功能性的 UISwitch?
我已经看到 this question,但是 none 的答案似乎可以解决我的问题。
重现:
- 创建一个新的视图控制器
- 添加垂直堆栈视图 (VSV)
- 将 VSV 的约束设置为与 View Controller 的根视图等高等宽,并且水平和垂直居中
- 将 VSV 的对齐设置为 "Center" 并将分布设置为 "Fill Equally"
- 向 VSV 添加 1+ 个水平堆栈视图 (HSV)
- 将每个 HSV 设置为 "Center" 对齐和 "Fill Equally" 分布
- 向每个 HSV 添加两个空白 UIView
- 对于每个 HSV,将其约束为与 VSV 的宽度相等
- 对于每个 HSV,将 UILabel 添加到第一个 UIView,将 UISwitch 添加到第二个 UIView
- 对于每个 UILabel 和 UISwitch,将其约束为在其父 UIView 上水平和垂直居中
当你运行应用程序时,布局是完美的。但是,可以与 none 的 UISwitch 进行交互,即使每个连续的父视图都启用了用户交互。
我在 Interface Builder 中的层次结构:
开关不起作用的内置应用程序:
您无法与开关交互的原因是包含它的空白视图最终高度为 0。限制该(空白)父视图的高度,使其不会调整为零,或将开关顶部和底部限制到父级(值为 0)。
我正在使用 Interface Builder 创建应用程序。我想安排一组标签和相应的 UISwitch,以便所有标签都显示在屏幕的左半部分,而开关则在右侧。开关应与标签对齐。
为此,我尝试使用垂直堆栈视图,其中嵌入了多个水平堆栈视图(每 label/switch 对一个水平堆栈视图)。为了正确对齐标签和开关,我将它们中的每一个都设置在一个空白的 UIView 中,并将它们(开关和标签)居中放置在相应的 UIView 上。然后将堆栈视图设置为 "Center" 对齐和 "Fill Equally" 分布。
通过此设置,我获得了适当的视觉布局,但即使每个父视图都设置了 "User Interaction Enabled",也无法激活 UISwitch。如果我将开关直接移动到水平堆栈视图中(没有将其嵌入空白 UIView 中),它可以正常工作,但我无法按照我想要的方式将其居中。
我怎样才能拥有我想要的布局并且仍然具有功能性的 UISwitch?
我已经看到 this question,但是 none 的答案似乎可以解决我的问题。
重现:
- 创建一个新的视图控制器
- 添加垂直堆栈视图 (VSV)
- 将 VSV 的约束设置为与 View Controller 的根视图等高等宽,并且水平和垂直居中
- 将 VSV 的对齐设置为 "Center" 并将分布设置为 "Fill Equally"
- 向 VSV 添加 1+ 个水平堆栈视图 (HSV)
- 将每个 HSV 设置为 "Center" 对齐和 "Fill Equally" 分布
- 向每个 HSV 添加两个空白 UIView
- 对于每个 HSV,将其约束为与 VSV 的宽度相等
- 对于每个 HSV,将 UILabel 添加到第一个 UIView,将 UISwitch 添加到第二个 UIView
- 对于每个 UILabel 和 UISwitch,将其约束为在其父 UIView 上水平和垂直居中
当你运行应用程序时,布局是完美的。但是,可以与 none 的 UISwitch 进行交互,即使每个连续的父视图都启用了用户交互。
我在 Interface Builder 中的层次结构:
开关不起作用的内置应用程序:
您无法与开关交互的原因是包含它的空白视图最终高度为 0。限制该(空白)父视图的高度,使其不会调整为零,或将开关顶部和底部限制到父级(值为 0)。