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

问题描述 投票:0回答:3
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但它根本没有显示,我不知道我的代码中缺少什么,我设置了约束但似乎没有工作,其他视图可以添加只是堆栈视图不看来......

我用来添加约束的函数是我创建的扩展,但我已经多次测试它并且它完美地工作。

我正在通过代码创建所有内容用于学习目的没有使用故事板只是代码..

提前感谢答案)对不起我的错误代码,我是初学者......

ios swift uistackview
3个回答
1
投票

我的经验告诉我你不能渲染UIStackView,因为它是空的,如果UIStackView没有任何子节点它将无法渲染,所以如果你设置背景颜色或任何其他属性并不重要,因为它们不会节目。

如果你想显示背景,即使UIStackView是空的,你可以用UIView替换它,并在其中放置U​​IStackView,只需相应地添加约束和属性。希望有所帮助。


0
投票

您的EventsCell可能已使用CGRectZero框架初始化。即确保在layoutSubviews方法中更新单元格子视图的框架。


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 debuger中检查约束,堆栈视图的大小。可能是因为约束问题,其大小设置为零或显示出单元格。

© www.soinside.com 2019 - 2024. All rights reserved.