【问题标题】:How do I horizontally center a UISwitch in a stack view?如何在堆栈视图中水平居中 UISwitch?
【发布时间】:2019-01-02 21:28:41
【问题描述】:

我正在使用 Interface Builder 创建一个应用程序。我想要一组标签和相应的 UISwitches 排列,使所有标签都出现在屏幕的左半边,而开关在右边。开关应与标签对齐。

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

通过此设置,我得到了适当的视觉布局,但即使每个父视图都设置了“启用用户交互”,也无法激活 UISwitches。如果我将开关直接移动到水平堆栈视图中(而不将其嵌入到空白 UIView 中)它可以正常工作,但我无法让它以我想要的方式居中。

我怎样才能拥有我想要的布局并且仍然有功能性 UISwitches?

我见过this question,但似乎没有一个答案能解决我的问题。


复制:

  1. 创建一个新的视图控制器
  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 上水平和垂直居中

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

我在 Interface Builder 中的层次结构:

开关不起作用的内置应用程序:

【问题讨论】:

    标签: ios interface-builder


    【解决方案1】:

    您无法与开关交互的原因是因为包含它的空白视图最终高度为 0。限制该(空白)父视图的高度,使其不会被调整为零,或限制将顶部和底部切换到父级(值为 0)。

    【讨论】:

    • 另一种查看方式是使包含 UISwitch 的任一视图的背景颜色不同。在情节提要中,视图看起来比开关大得多。但是,当您运行应用程序时,您看不到彩色背景,包含视图的大小正在被压缩。向视图添加宽度和高度约束,它现在将显示背景,并且按钮现在可以选择。
    • 由于容器视图位于水平堆栈视图中,并且设置为填充,因此不需要对其进行宽度约束。
    • 添加高度约束修复了它。非常感谢!
    • 发生这种情况时使用视图调试器。您将能够看到哪个视图与您的视图重叠
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2020-11-07
    • 1970-01-01
    • 2014-12-18
    • 2019-10-21
    相关资源
    最近更新 更多