TableView 展开和折叠

最近有一个小伙伴问我关于tableview的展开和折叠问题,相信很多人都写过。 还是自己随便实现了一遍。

基本的思路就是,用一个Model类来计算和控制tableview的高度。

实现效果:cell内容五行或者不足五行的时候,没有折叠功能,内容超过五行的时候,可以折叠和展开。



首先可以根据需求把cell的状态获取到为三个 不可展开、折叠状态和展开状态。 在Model里面可以用枚举来定义

typedef NS_OPTIONS(NSUInteger, TYCellType) {

    TYCellTypeNone, //不可展开
    TYCellTypeFold, //折叠状态
    TYCellTypeUnfold, //展开状态
};
然后用一个属性来记录状态,并在内容的setter方法里面可以判断出初始的状态未不可展开或者折叠状态。此处我用NSString的分类自己实现了一个计算字符串高度的方法

- (CGFloat)textHeightInWidth:(CGFloat)width font:(UIFont *)font{

    NSDictionary *attributesDict = @{NSFontAttributeName:font};
    
    CGSize maxSize = CGSizeMake(width, MAXFLOAT);
    
    CGRect subviewRect = [self boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attributesDict context:nil];
    
    return subviewRect.size.height;
}
此方法传入宽度和字体,用于判断基本label这些控件的显示,若要用到富文本,可以自己相应作出调整。

最主要的就是在Model中写一个计算方法,此方法根据cell的状态和内容计算出cell的高度,并返回给代理。

然后在cell中实现一个BLOCK用于展开或折叠点击之后回调,并且通过状态判断cell的显示情况。

此demo有一些地方的封装还不是很好,左右字体都用的是系统17号,有兴趣的小伙伴可以自己把字体封装进入写接口。



***以上  项目名称T_yunDemoTableUnfold

(欢迎随手给一颗星星哦~)本篇博客Demo地址https://github.com/xmy0010/DemoForCSDN

本人邮箱[email protected]欢迎小伙伴一起讨论,学习,进步。






猜你喜欢

转载自blog.csdn.net/xmy0010/article/details/78454376
今日推荐