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中,但是它根本没有显示出来,我不知道我的代码中缺少什么,我设置了约束,但是似乎不起作用,可以添加其他视图堆栈视图未出现...
我用来添加约束的函数是我创建的扩展,但是我已经对其进行了多次测试,并且效果很好。
出于学习目的,我正在通过代码创建所有内容,没有故事板仅用作代码。
预先感谢您的回答)对不起,我的代码错误,我是初学者...
答案 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方法中更新单元格子视图的框架。