UITableViewCellAccessoryCheckmark和AutoLayout约束(UITableViewCellAccessoryCheckmark and AutoLayout constraints)

问题

我有自定义的UITableViewCell并管理我的单元格的选择。 选择该单元格并显示选中标记后,该单元格的“ Content View宽度会缩小,带有尾随约束的我的标签会移到左侧。 如何有效避免内容移动?

我不想将约束设置为领先,因为我具有灵活的tableview宽度并且它们是正确对齐的。 当我想通过它的IBOutlets更新代码中标签的约束时,当我在cellForRow:返回UITableViewCell多个子类时,我遇到了麻烦didSelectRowAtIndexPath:当尝试在代码中设置约束时,在didSelectRowAtIndexPath:出现了无法识别的选择器错误。 有什么优雅的解决方案吗? 谢谢。

在此处输入图片说明

在此处输入图片说明

回答1

此行为是设计使然。

获得所需行为的最简单方法是在每个单元格上设置一个空的附件视图,该视图会将所有内容向左移动到与选中标记相同的距离。

回答2

我有一个类似的(实际上是确切的)问题,其中选中标记会将所有内容推到左侧。

- 编辑:

在最初回答几个小时后,我意识到这是一个非常简单的问题。

这种向左的推动是推动单元格的contentView的约束。 所以?

将约束从右侧的项目(如i按钮)连接到单元格本身,而不是其contentView。



-原始答案(实际答案在最上面,仅供参考):

我只是意识到有一个非常简单的解决方案。 我已经当了对号上被推留下了一个按钮,我必须保持一个约束,以保持它在的地方(让“取消选中”将不会移动按钮右侧)。 从正确的角度来说,这是硬编码的“宽度”,总体来说是不好的做法。 没关系,我无法“获取”选中标记“宽度”来动态地执行此操作。

解决方案?

从左侧按住约束。

就是这样。 我也有一个标签,因此在我的情况下:约束从左按钮到标签(这样它们就不会重叠)和从左按钮到左content-view的约束。 基本上,任何在右侧的移动都不会真正“到达”左侧(而是让所有“坐在”右侧)。

回答3

一直把复选标记放在那里,然后只使用alpha /透明度玩怎么样?

    if checked
    {
        cell.accessoryType = .checkmark
        cell.tintColor = cell.tintColor.withAlphaComponent(1)
    }
    else
    {
        cell.accessoryType = .checkmark
        cell.tintColor = cell.tintColor.withAlphaComponent(0)
    }

更多相关内容:请点击查看