当敲击细胞时,UILabel向右移动

时间:2018-04-23 12:44:01

标签: ios swift uitableview autolayout

我有一个UITableView并且里面有单元格,我在其中使用了textLabel和detailTextLabel以及一个来自revealIndicator的accessoryView。这些是我的约束。

if (cell.contentView.constraints.count == 0) {
      cell.textLabel?.translatesAutoresizingMaskIntoConstraints = false
      cell.detailTextLabel?.translatesAutoresizingMaskIntoConstraints = false

      let margins = cell.contentView.layoutMarginsGuide

      // TextLabel constraints
      cell.textLabel?.leftAnchor.constraint(equalTo: margins.leftAnchor).isActive = true
      cell.textLabel?.centerYAnchor.constraint(equalTo: margins.centerYAnchor).isActive = true

      // DetailTextLabel constraints
      cell.detailTextLabel?.rightAnchor.constraint(equalTo: margins.rightAnchor, constant: -10).isActive = true
      cell.detailTextLabel?.leftAnchor.constraint(equalTo: (cell.textLabel?.layoutMarginsGuide.rightAnchor)!, constant: 10).isActive = true
      cell.detailTextLabel?.centerYAnchor.constraint(equalTo: margins.centerYAnchor).isActive = true
    }

现在,当第一次加载表视图时,我看到一切正常,即detailTextLabel距离contentView只有-10个点,但是当我点击单元格时,detailTextLabel向右移动并拥抱到{{ 1}}好像-10点约束甚至不存在。现在,当我再次回到此VC时,我仍然看到contentView拥抱到contentView,即detailTextLabel没有任何效果。但是,如果我解雇这个VC并再次回到这里我的约束和就位应该是这样,当我点击单元格进入下一个屏幕时问题再次出现。

我的viewWillAppear中有一个reloadData()调用,它被调用但不会产生任何影响。

我希望我能解释自己,我在这里做错了吗?

2 个答案:

答案 0 :(得分:4)

问题是您使用的是内置单元格类型,其中文本标签和详细信息标签是内置的,不属于您。它们属于细胞。细胞在选择时重新定位它们。你正在与细胞作斗争。

如果要自定义单元格的外观并更改单元格标签的位置,请使用自定义单元格类型,并为其指定属于您的自定义标签。您可以在故事板设计器中为它们提供约束。根本不要使用内置文本标签和细节标签。

答案 1 :(得分:3)

如果单元格标签不是自定义类型单元格,则无法更改它们的约束。如果您想要自定义约束,那么您应该创建自己的自定义单元格,该单元格继承自UITableViewCell并设置您自己的约束。