问题 我有过UICollectionView,实现方法。sizeForItemAt...我希望单元格具有分配给sizeForItemAt方法,但在重用单元格时,Size属性将保持不变。
所以我想知道是否有办法强迫可重复使用的细胞改变它们的高度?
截图 以下是链接:https://i.stack.imgur.com/33Fyf.png
代码: CellForItemat:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: answerLetterCell, for: indexPath) as! AnswerLetterCell
cell.answerLetterButton.setTitleColor(Colors.answerLetterButtonColor, for: .normal)
cell.letter = letters[indexPath.item]
return cell
}
sizeForItemAt:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let answerCellHeightMultiplier: CGFloat = answer.count > 18 ? 0.28 : 0.37
return CGSize(width: (self.frame.width / cellCount) - cellSpacing, height: self.frame.height * answerCellHeightMultiplier)
}
自定义UICollectionViewCell:
class AnswerLetterCell: UICollectionViewCell {
var letter: String? {
didSet {
guard let letter = letter else { return }
if letter != " " {
answerLetterButton.setTitle(letter, for: .normal)
answerLetterButton.isHidden = false
} else {
answerLetterButton.isHidden = true
}
}
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
func setup() {
addSubview(answerLetterButton)
let resizedLetterButton = Helpers.resizeImageSize(uiView: self, ratio: 42/48, multiplier: 1)
/* Letter Button Constraints */
answerLetterButton.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
answerLetterButton.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
answerLetterButton.widthAnchor.constraint(equalToConstant: resizedLetterButton.width).isActive = true
answerLetterButton.heightAnchor.constraint(equalToConstant: resizedLetterButton.height).isActive = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
/* Views */
let answerLetterButton: UIButton = {
let uiButton = UIButton()
uiButton.translatesAutoresizingMaskIntoConstraints = false
uiButton.setBackgroundImage(#imageLiteral(resourceName: "answer_letter_base.pdf"), for: .normal)
uiButton.titleLabel?.font = Fonts.letterButtonFont
uiButton.isUserInteractionEnabled = false
return uiButton
}()
}
UICollectionViewDelegateFlowLayout有功能collectionView(_:layout:sizeForItemAt:)对集合视图中的每个可见单元格调用。 您的实现返回一个固定的宽度和一个带有值的动态高度。self.frame.height * answerCellHeightMultiplier,在哪里answerCellHeightMultiplier是answer.count > 18 ? 0.28 : 0.37,取决于属性answer. 因此,如果单元格应该具有动态高度,则取决于属性。answer, answer在显示集合视图时必须更改,这是不可能的。 我的建议是用在sizeForItemAt而不是answer对每个单元格具有正确高度值的数组。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。