图标会更改UITableViewCell选择的位置

时间:2017-02-12 13:18:07

标签: ios xcode autolayout constraints tableview

我有一个原型细胞。第一次打开表视图控制器时。细胞看起来像这样:

enter image description here

问题#1:我有一个约束,即日历图标的leading space to superview应为10分。但实际上它得到了16分。

然后发生了很奇怪的事情。我点击单元格。它进入下一个屏幕。然后我回到这个屏幕。并且图标位置正确(10个点空间):

enter image description here

接下来会发生什么:如果我点击单元格,在很短的时间内(突出显示时),图标会向右移动6点:

enter image description here

问题2:如何避免这种情况“移动' ?

我尝试做的事情:将这两行添加到didSelectRowAtIndexPath和willSelectRowAtIndexPath cell?.setNeedsLayout() cell?.setNeedsUpdateConstraints()

但它没有多大帮助..如果您需要更多详细信息,请与我们联系。顺便说一句,我没有改变任何约束的代码。一切都是静止的。

编辑:这就是图标(imageView)的限制条件:

enter image description here

注意:leading space to superview等于2,因为它有一些默认值为8(所以2 + 8 = 10)。

1 个答案:

答案 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,但我觉得这很有意义