我有一个原型细胞。第一次打开表视图控制器时。细胞看起来像这样:
问题#1:我有一个约束,即日历图标的leading space to superview
应为10分。但实际上它得到了16分。
然后发生了很奇怪的事情。我点击单元格。它进入下一个屏幕。然后我回到这个屏幕。并且图标位置正确(10个点空间):
接下来会发生什么:如果我点击单元格,在很短的时间内(突出显示时),图标会向右移动6点:
问题2:如何避免这种情况“移动' ?
我尝试做的事情:将这两行添加到didSelectRowAtIndexPath和willSelectRowAtIndexPath
cell?.setNeedsLayout()
cell?.setNeedsUpdateConstraints()
但它没有多大帮助..如果您需要更多详细信息,请与我们联系。顺便说一句,我没有改变任何约束的代码。一切都是静止的。
编辑:这就是图标(imageView)的限制条件:
注意:leading space to superview
等于2
,因为它有一些默认值为8(所以2 + 8 = 10)。
答案 0 :(得分:0)
请调整并尝试我的代码。在注册此单元格之前
tableView.register(UserCell.self, forCellReuseIdentifier: "myCell")
并初始化
let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! UserCell
==
class UserCell: UITableViewCell {
override func layoutSubviews() {
super.layoutSubviews()
textLabel?.frame = CGRect(x: 56, y: (textLabel?.frame.origin.y)! - 2, width: (textLabel?.frame.width)!, height: (textLabel?.frame.height)!)
detailTextLabel?.frame = CGRect(x: 56, y: (detailTextLabel?.frame.origin.y)! + 2, width: (detailTextLabel?.frame.width)!, height: (detailTextLabel?.frame.height)!)
}
let profileImagView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.layer.cornerRadius = 20
imageView.layer.masksToBounds = true
imageView.image = UIImage(named: "logo")
imageView.contentMode = .scaleAspectFill
return imageView
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
addSubview(profileImagView)
profileImagView.leftAnchor.constraint(equalTo: self.leftAnchor,constant:8).isActive = true
profileImagView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
profileImagView.widthAnchor.constraint(equalToConstant: 40).isActive = true
profileImagView.heightAnchor.constraint(equalToConstant: 40).isActive = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我没有尝试过xib,但我觉得这很有意义