【发布时间】:2021-12-04 18:52:57
【问题描述】:
我尝试创建一个 collectionView 单元格,其中心有一个图像
我的班级看起来像:
import Foundation
import UIKit
class MenuCell: UICollectionViewCell{
let image:UIImageView = {
let i = UIImageView()
i.image = (UIImage(named: "mainMenu"))
i.contentMode = .scaleAspectFit
return i
}()
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError()
}
func setupCell(){
addSubview(image)
let centerXConst = NSLayoutConstraint(item: image, attribute: .centerX, relatedBy: .equal, toItem: self.contentView, attribute: .centerY, multiplier: 1.0, constant: 0.0)
let centerYConst = NSLayoutConstraint(item: image, attribute: .centerY, relatedBy: .equal, toItem: self.contentView, attribute: .centerY, multiplier: 1.0, constant: 0.0)
image.addConstraints([centerXConst, centerYConst])
NSLayoutConstraint.activate([image.centerYAnchor.constraint(equalTo: self.contentView.centerYAnchor), image.centerXAnchor.constraint(equalTo: contentView.centerXAnchor)])
}
}
但是当我运行它时它给了我一个错误
当添加到视图时,约束的项必须是 该视图(或视图本身)。如果约束,这将崩溃 需要在组装视图层次结构之前解决。休息
如我所见,我通常添加常量。
更新: 更改函数的代码。不知道=(
func setupCell(){
contentView.addSubview(image)
let centerXConst = NSLayoutConstraint(item: image, attribute: .centerX, relatedBy: .equal, toItem: self.contentView, attribute: .centerX, multiplier: 1.0, constant: 0.0)
let centerYConst = NSLayoutConstraint(item: image, attribute: .centerY, relatedBy: .equal, toItem: self.contentView, attribute: .centerY, multiplier: 1.0, constant: 0.0)
NSLayoutConstraint.activate([centerXConst, centerYConst])
}
【问题讨论】:
-
对于 centerXConst var 属性是 centerX 而不是 centerY。也只添加 NSLayoutConstraint.activate 行。不需要 image.addConstraints 代码。
标签: ios swift view uiview uiimageview