堆栈视图的子视图之一根本没有显示

时间:2017-02-13 16:18:29

标签: ios swift uistackview

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

enter image description here

这是我在视图控制器视图中设置和放置堆栈视图的方法:

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
}()

其他两个排列堆栈视图的视图是UIImageView s。

为什么这两个图像和寄存器视图不是?我错过了什么吗?

5 个答案:

答案 0 :(得分:2)

您似乎没有给您的UIButton一个帧大小。如果添加autoresizingMask行,请查看您获得的内容:

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

    registerButton.autoresizingMask = [.flexibleWidth, .flexibleHeight]

    containerView.addSubview(registerButton)

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

你可以试试这个。

答案 4 :(得分:0)

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

相关问题