大家知道UITableView给显示层级视图提供了支持,就是通过Cell的缩进:
cell.indentationLevel = node.depth; // 缩进级别
cell.indentationWidth = 30.f; // 每个缩进级别的距离
不过对于我们自定义的Cell来说,以上缩进的设置会变得无效。究竟是为何?如何解决?就让本猫为大家一一道来 :)
1.为什么默认Cell可以支持缩进?
我们可以实际在App运行时选择 ‘调试视图层次’ 来查看默认的UI显示。可以看到系统对于设置缩放的Cell的Label对象自动增加了左边距(x坐标)
2.为什么自定义Cell不支持缩进?
默认Cell的Label名称是textLabel,但是自定义的Cell中不可以定义同名的Label!所以系统不知道缩进自定义Cell中的哪个Label,这就尴尬了… :)
3.如何解决?
知道了原因,解决就很简单,我们只需要根据Cell背后支持的Model对应缩进属性来设置Label的x偏移即可。
4.举个栗子 ;)
比如Cell背后支持的数据对象是Node:
@interface Node : NSObject
@property (nonatomic , assign) int parentId;//父节点的id,如果为-1表示该节点为根节点
@property (nonatomic , assign) int nodeId;//本节点的id
@property (nonatomic , strong) NSString *name;//本节点的名称
@property (nonatomic , assign) int depth;//该节点的深度
@property (nonatomic , assign) BOOL isExpand;//该节点是否处于展开状态
@end
注意最后一个属性isExpand,我们找的就是它了。
在自定义Cell类中增加一个config方法,然后添加如下代码:
let leftOffset = 16 + Int(node.depth) * 33
nameLbl.snp.makeConstraints {make in
make.left.equalTo(contentView).offset(leftOffset)
//其他界面限制。。。
}
为什么要用 16和33这两个值呢?这是我经过测试总结的看起来还不错的数值,但可能只适用于我自己的项目。
写完,谢谢观赏 ;)