开启isEditing状态后TableView文本对齐异常,原因是什么?
问题描述
重要提示: TableView约束代码位于单独文件中。

编辑按钮代码
@objc func didTapEdit(){ if plansListTableView.isEditing { plansListTableView.isEditing = false } else { plansListTableView.isEditing = true } }
约束代码
private func addConstraints(){ addSubview(planLabel) NSLayoutConstraint.activate([ planLabel.centerYAnchor.constraint(equalTo: centerYAnchor), planLabel.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor, constant: 20) ]) }
当isEditing为true时,文本出现对齐异常,请问导致该问题的原因是什么?
问题原因及解决方法
原因是你把planLabel的leading约束绑定到了safeAreaLayoutGuide.leadingAnchor,而TableView进入编辑状态时,系统会自动在cell左侧添加编辑控件(删除/排序按钮),并调整cell的contentView内边距来适配这些控件。但你的label没有跟随contentView的内边距变化,依然固定在safeArea的位置,就会和编辑控件重叠,出现对齐异常。
同时你把centerY约束绑定到cell本身的centerYAnchor,也不如绑定到contentView准确,因为cell的布局逻辑都是基于contentView的。
修改后的约束代码应该是:
private func addConstraints(){ addSubview(planLabel) NSLayoutConstraint.activate([ planLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), planLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 20) ]) }
这样label会跟随contentView的内边距自动调整位置,编辑状态下就能正常对齐了。
内容的提问来源于stack exchange,提问作者user15200527
相关产品推荐
相关产品推荐

