【问题标题】:One of the subviews of a stack view not showing up at all堆栈视图的子视图之一根本不显示
【发布时间】:2017-02-13 16:18:29
【问题描述】:

我希望我的堆栈视图具有三个视图:红色图像、蓝色图像和寄存器视图。问题是,虽然红色和蓝色按钮看起来很好,但注册视图却没有。

这就是我设置堆栈视图并将其放置在视图控制器视图中的方式:

func setupSocialStackView() {
    let socialStackView = UIStackView(arrangedSubviews: redImage, blueImage, registerView])
    socialStackView.axis = .vertical
    socialStackView.distribution = .fillProportionally
    view.addSubview(socialStackView)
    socialStackView.spacing = 8

    // NSLayoutAnchor constraints here to place stack view 
    // inside my view controller view
}

这是我未显示的注册视图的代码:

lazy var registerView: UIView = {
    let containerView = UIView()

    // Register button
    let registerButton = UIButton(type: .system)
    registerButton.setTitle("Register", for: .normal)
    registerButton.titleLabel?.font = UIFont.systemFont(ofSize: 12, weight: UIFontWeightLight)
    registerButton.titleLabel?.textAlignment = .center
    registerButton.setTitleColor(UIColor.black, for: .normal)
    registerButton.titleLabel?.textColor = UIColor(r: 91, g: 90, b: 90)
    registerButton.addTarget(self, action: #selector(presentRegisterController), for: .touchUpInside)
    containerView.addSubview(registerButton)

    return containerView
}()

堆栈视图的另外两个排列视图是UIImageViews。

为什么有两个图像而寄存器视图没有?我错过了什么吗?

【问题讨论】:

  • 能不能显示下没有显示的view的约束?
  • A UIView 默认情况下没有 intrinsicContentSize,因此要将其与带有垂直轴的 UIStackView 一起使用,您需要添加高度约束。因为它是堆栈视图,所以将您的寄存器视图的高度设置为 0。

标签: ios swift uistackview


【解决方案1】:

你似乎没有给你的 UIButton 一个框架大小。如果添加 autoresizingMask 行,看看你会得到什么:

    registerButton.addTarget(self, action: #selector(presentRegisterController), for: .touchUpInside)

    registerButton.autoresizingMask = [.flexibleWidth, .flexibleHeight]

    containerView.addSubview(registerButton)

【讨论】:

    【解决方案2】:

    未显示的视图是容器UIView,它没有固有大小。在lazy var 块内,将registerButton 的边缘约束到containerView,以便容器视图具有大小。

    【讨论】:

      【解决方案3】:

      对我来说,我需要为堆栈视图中的视图添加底部、右侧和左侧约束。然后就出现了。

      【讨论】:

        【解决方案4】:

        看起来您正在创建 UIView 的子类,以便显示“注册?”按钮。这太复杂了,一个 UIButton 已经是 UIView 的子类,所以你需要做的就是将注册按钮直接添加到你的 stackview 中!希望有帮助

        【讨论】:

        • 我实际上想在注册视图中添加更多内容,而不仅仅是一个按钮。谢谢你的回答。
        • 好吧,为什么你的注册 UIView 里面有一个容器 UIView?只需将注册按钮添加到 self.addSubview。同样正如@beyowulf 所说,如果您将 UIView 添加到堆栈中,它不知道它应该有多大,因此您需要给视图一个高度约束,或者您可以将您的注册按钮约束到注册视图(使用自动布局,而不是框架),以便您注册视图知道它的内容有多大。
        【解决方案5】:

        首先在 stackview 中添加所有 3 个视图。从右侧的属性检查器中设置其 Spacingdistribution。例如(spacing=10,distribution=fill 相等)。现在选择堆栈视图并添加相应的约束.

        你可以试试这个。

        【讨论】:

          猜你喜欢
          • 2020-10-21
          • 2020-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-27
          相关资源
          最近更新 更多