为什么我创建的stackView不显示?

时间:2018-08-27 18:46:06

标签: ios swift uistackview

class EventsCell: UICollectionViewCell {
    override init(frame: CGRect) {
        super.init(frame: frame)
        setUpCell()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    lazy var containerView: UIView = {
      let container = UIView()
        container.frame = eventImage.frame
        container.addSubview(eventImage)
        container.layer.masksToBounds = false
        container.translatesAutoresizingMaskIntoConstraints = false
        extensionSetConstraintsWithFormat(horizontalFormat: "|[v0]|", verticalFormat: "|[v0]|", views: [eventImage])
        container.extensionSetShadowEasy(color: UIColor.black.cgColor), offSet: CGSize(width: 0, height: 3))
      return container
    }()

    let eventImage: UIImageView = {
        let eventView = UIImageView()
        eventView.backgroundColor = UIColor.red
        eventView.layer.cornerRadius = 10
        eventView.translatesAutoresizingMaskIntoConstraints = false
        eventView.layer.masksToBounds = true
        eventView.image = UIImage(named: "Event")
        return eventView
    }()

    let usersStackView: UIStackView = {
        let stack = UIStackView()
        stack.backgroundColor = UIColor.orange
        stack.translatesAutoresizingMaskIntoConstraints = false
        stack.axis = .horizontal
        stack.distribution = .fillProportionally
        stack.layer.cornerRadius = 10
        stack.extensionSetShadowEasy(color: UIColor.black.cgColor), offSet: CGSize(width: 0, height: 3))
        return stack
    }()


    func setUpCell(){
        layer.masksToBounds = false
        backgroundColor = UIColor.white
        layer.cornerRadius = 10
        extensionSetShadowEasy(color: UIColor.black.cgColor), offSet: CGSize(width: 5, height: 5))
        addSubview(containerView)
        addSubview(usersStackView)

        extensionSetConstraintsWithFormat(horizontalFormat: "|-10-[v0]-10-|", verticalFormat: "|-10-[v0(200)][v1(50)]-10-|", views: [containerView, usersStackView])
        extensionSetConstraintsWithFormat(horizontalFormat: "|-10-[v0]-10-|", verticalFormat: nil, views: [usersStackView])


    }

}

我试图将UIStackView添加到collectionViewCell中,但是它根本没有显示出来,我不知道我的代码中缺少什么,我设置了约束,但是似乎不起作用,可以添加其他视图堆栈视图未出现...

我用来添加约束的函数是我创建的扩展,但是我已经对其进行了多次测试,并且效果很好。

出于学习目的,我正在通过代码创建所有内容,没有故事板仅用作代码。

预先感谢您的回答)对不起,我的代码错误,我是初学者...

3 个答案:

答案 0 :(得分:1)

我的经验告诉我,由于UIStackView为空,因此无法渲染,如果UIStackView没有任何子级,则不会被渲染,因此设置背景颜色或其他任何属性都没有关系,因为它们将不会显示。

如果即使UIStackView为空也要显示背景,则可以将其替换为UIView,并在其中放入UIStackView,只需相应地添加约束和属性即可。希望有帮助。

答案 1 :(得分:0)

如@ascentman所述,请勿直接将子视图添加到单元格,而应在contentView上添加视图。

func setUpCell(){
        layer.masksToBounds = false
        contentView.backgroundColor = UIColor.white
        layer.cornerRadius = 10
        extensionSetShadowEasy(color: UIColor.black.cgColor), offSet: CGSize(width: 5, height: 5))
        contentView.addSubview(containerView)
        contentView.addSubview(usersStackView)

        extensionSetConstraintsWithFormat(horizontalFormat: "|-10-[v0]-10-|", verticalFormat: "|-10-[v0(200)][v1(50)]-10-|", views: [containerView, usersStackView])
        extensionSetConstraintsWithFormat(horizontalFormat: "|-10-[v0]-10-|", verticalFormat: nil, views: [usersStackView])

    }

尝试此操作可能会对您有所帮助。

其他视图是否可见?如果其他视图可见,则检查约束,3D调试器中堆栈视图的大小。可能是由于约束问题,其大小设置为零或显示在单元格外。

答案 2 :(得分:0)

您的EventsCell可能会使用CGRectZero框架进行初始化。也就是说,请确保您在layoutSubviews方法中更新单元格子视图的框架。