我有一个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()调用,它被调用但不会产生任何影响。
我希望我能解释自己,我在这里做错了吗?
答案 0 :(得分:4)
问题是您使用的是内置单元格类型,其中文本标签和详细信息标签是内置的,不属于您。它们属于细胞。细胞在选择时重新定位它们。你正在与细胞作斗争。
如果要自定义单元格的外观并更改单元格标签的位置,请使用自定义单元格类型,并为其指定属于您的自定义标签。您可以在故事板设计器中为它们提供约束。根本不要使用内置文本标签和细节标签。
答案 1 :(得分:3)
如果单元格标签不是自定义类型单元格,则无法更改它们的约束。如果您想要自定义约束,那么您应该创建自己的自定义单元格,该单元格继承自UITableViewCell并设置您自己的约束。