根据内容调整 UILabel 高度?
Adjusting UILabel height depending on contents?
我有一个自定义 CollectionViewCell class,其中包含一个标签和一个图像。基本上,图像将被限制在单元格的左侧、顶部和右侧。但是,我希望它的高度根据 UILabel 的高度而变化,而 UILabel 的高度又将取决于其中的内容。以下是我的尝试:
导入 UIKit
class CustomCollectionViewCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .yellow
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
convenience init(cellTextTile text: String) {
self.init()
}
func setupCustomCellElements(cellImageName image: String, cellTitleTextColour textColour: UIColor, cellTitleTextSize textSize: CGFloat, cellTitleFontType fontType: String, cellTitle title: String) {
let cellImage: UIImageView = {
let imageView = UIImageView()
imageView.backgroundColor = .clear
imageView.image = UIImage(named: image)
imageView.translatesAutoresizingMaskIntoConstraints = false
return imageView
}()
let cellTitle: UILabel = {
let label = UILabel()
label.textColor = textColour
label.font = UIFont(name: fontType, size: textSize)
label.text = title
label.textAlignment = .center
label.frame.size = CGSize(width: self.frame.size.width, height: CGFloat.greatestFiniteMagnitude)
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.sizeToFit()
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
addSubview(cellImage)
addSubview(cellTitle)
NSLayoutConstraint.activate([
cellTitle.bottomAnchor.constraint(equalTo: bottomAnchor),
cellTitle.leftAnchor.constraint(equalTo: leftAnchor),
cellTitle.rightAnchor.constraint(equalTo: rightAnchor),
cellImage.bottomAnchor.constraint(equalTo: cellTitle.topAnchor),
cellImage.topAnchor.constraint(equalTo: topAnchor),
cellImage.leftAnchor.constraint(equalTo: leftAnchor),
cellImage.rightAnchor.constraint(equalTo: rightAnchor)
])
}
}
但是,使用上面的代码我没有得到我正在寻找的那种行为。我希望 UIlabel 的高度根据其内容而改变。并依次对图片的高度进行相应的调整?
此致,
沙迪.
您需要 imageView 的高度限制
cellImage.heightAnchor.constraint(equalToConstant: 50), // or any value
也不要在方法中添加属性 setupCustomCellElements
使它们成为实例变量,并将它们添加到 init
函数中
最好也将视图添加到
contentView.addSubview(cellImage)
contentView.addSubview(cellTitle)
并用它构造约束
我有一个自定义 CollectionViewCell class,其中包含一个标签和一个图像。基本上,图像将被限制在单元格的左侧、顶部和右侧。但是,我希望它的高度根据 UILabel 的高度而变化,而 UILabel 的高度又将取决于其中的内容。以下是我的尝试:
导入 UIKit
class CustomCollectionViewCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .yellow
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
convenience init(cellTextTile text: String) {
self.init()
}
func setupCustomCellElements(cellImageName image: String, cellTitleTextColour textColour: UIColor, cellTitleTextSize textSize: CGFloat, cellTitleFontType fontType: String, cellTitle title: String) {
let cellImage: UIImageView = {
let imageView = UIImageView()
imageView.backgroundColor = .clear
imageView.image = UIImage(named: image)
imageView.translatesAutoresizingMaskIntoConstraints = false
return imageView
}()
let cellTitle: UILabel = {
let label = UILabel()
label.textColor = textColour
label.font = UIFont(name: fontType, size: textSize)
label.text = title
label.textAlignment = .center
label.frame.size = CGSize(width: self.frame.size.width, height: CGFloat.greatestFiniteMagnitude)
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.sizeToFit()
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
addSubview(cellImage)
addSubview(cellTitle)
NSLayoutConstraint.activate([
cellTitle.bottomAnchor.constraint(equalTo: bottomAnchor),
cellTitle.leftAnchor.constraint(equalTo: leftAnchor),
cellTitle.rightAnchor.constraint(equalTo: rightAnchor),
cellImage.bottomAnchor.constraint(equalTo: cellTitle.topAnchor),
cellImage.topAnchor.constraint(equalTo: topAnchor),
cellImage.leftAnchor.constraint(equalTo: leftAnchor),
cellImage.rightAnchor.constraint(equalTo: rightAnchor)
])
}
}
但是,使用上面的代码我没有得到我正在寻找的那种行为。我希望 UIlabel 的高度根据其内容而改变。并依次对图片的高度进行相应的调整?
此致, 沙迪.
您需要 imageView 的高度限制
cellImage.heightAnchor.constraint(equalToConstant: 50), // or any value
也不要在方法中添加属性 setupCustomCellElements
使它们成为实例变量,并将它们添加到 init
函数中
最好也将视图添加到
contentView.addSubview(cellImage)
contentView.addSubview(cellTitle)
并用它构造约束