细胞在启动时看起来正确。
滚动到新单元格(显然会调用dequeReusableCell)后,单元格中先前存在的约束将丢失。
以下是单元格中imageView的约束设置:
以下是应用程序启动时的样子(按照我喜欢的方式布置单元格)
当你开始滚动时,细胞的重复使用会扰乱约束。
在单元格上设置图像后,我在updateImage方法中调用layoutIfNeeded():
func updateWithImage(image: UIImage) {
userGroupPhotoImageView.layer.masksToBounds = true;
userGroupPhotoImageView.layer.cornerRadius = 5.0;
self.userGroupPhotoImageView.image = image
self.layoutIfNeeded()
}
indexPath处的行的单元格:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as MyCell
cell.nameLabel?.text = "Cell \(indexPath.row)"
switch (indexPath.row) {
case 0:
cell.updateWithImage(UIImage(named: "group0")!)
case 1:
cell.updateWithImage(UIImage(named: "group1")!)
case 2:
cell.updateWithImage(UIImage(named: "group2")!)
case 3:
cell.updateWithImage(UIImage(named: "group3")!)
case 4:
cell.updateWithImage(UIImage(named: "group4")!)
case 5:
cell.updateWithImage(UIImage(named: "IMG_0184")!)
default:
cell.updateWithImage(UIImage(named: "IMG_0185")!)
}
return cell
}
开始滚动后的样子:
向下滚动:
向后滚动到顶部;
ImageView上的约束:
答案 0 :(得分:0)
class UserGroupCell: UITableViewCell {
@IBOutlet weak var userGroupNameLabel: UILabel!
@IBOutlet weak var userGroupPhotoImageView: UIImageView! {
didSet {
userGroupPhotoImageView.clipsToBounds = true;
userGroupPhotoImageView.layer.masksToBounds = true;
userGroupPhotoImageView.layer.cornerRadius = 5.0;
}
}
override func prepareForReuse() {
super.prepareForReuse()
userGroupPhotoImageView.image = nil
}
func updateWithImage(image: UIImage) {
self.userGroupPhotoImageView.image = image
self.setNeedsLayout()
self.layoutIfNeeded()
}
}
答案 1 :(得分:0)
如果您没有找到任何答案。 你应该以编程方式进行。并在
中设置约束- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
方法。 通过这种方式,您可以确定会发生什么。