您当前的位置: 首页 >  ui

iOS自定义UITableViewCell不支持缩进的解决

发布时间:2018-05-22 08:52:56 ,浏览量:0

大家知道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这两个值呢?这是我经过测试总结的看起来还不错的数值,但可能只适用于我自己的项目。

写完,谢谢观赏 ;)

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    107766博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1147s