UITableViewCellAccessoryCheckmark和AutoLayout约束

时间:2014-04-08 09:35:59

标签: ios objective-c uitableview autolayout

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

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

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:24)

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

- 编辑:

在我原来的答案后几个小时,我意识到这是一个非常简单的问题。

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

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

Constraint to cell view

- 原始回答(实际回答位于首位,此为记录):

我刚刚意识到这是一个非常简单的解决方案。当勾选标记打开时,我有一个向左推的按钮,我必须保持一个约束以使其保持原位(以便“取消选中”并且“将按钮移动到右侧”)。它是硬编码的宽度'从正确和整体只是不好的做法。别介意我无法得到'选中标记' width'动态地做这件事。

解?

从左边拿一个约束。

那就是它。我也有一个标签,所以在我的情况下:从按钮左侧到标签的约束(因此它们不会重叠)和从按钮左到左的内容视图。基本上,在右边的任何动作都不会真正达到'左侧(相反,所有东西都坐在右边)。

Cell with constraints to left

答案 1 :(得分:10)

此行为是设计使然。

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

答案 2 :(得分:0)

如何一直将复选标记放在其中,而只使用alpha /透明度?

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