之前一直在写XLFrom表单提交,行高一直是固定的,后来有个需求需要动态变换行高,自己也是脑抽了用了XLFrom来写,到这个界面快写完了,需求里面动态获取行高也是醉了。
XLFrom里面的行高设置是一个非实例方法
之前一直是固定的,所以在网上也没有找到解决方法。
+(CGFloat)formDescriptorCellHeightForRowDescriptor:(XLFormRowDescriptor *)rowDescriptor{
//返回的高度
return 50.0;
}
自己研究了一下
在初始化表单的时候创建一个通知
- (instancetype)init
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(setFormCellHeight:) name:setFromCellHeightNSNotification object:nil];
[self initializeForm];
}
return self;
}
然后在给section的时候,把数据传过去
这里其实我是动态创建了list长度的section
每个cell高度都是不同的。
NSArray *list = @[
@[@"14栋101",@"14栋102",@"14栋103",@"14栋104"],
@[@"15栋101",@"15栋102",@"15栋103",@"15栋104",@"15栋105",@"15栋106",@"15栋106",@"15栋106",@"15栋106"],
@[@"16栋101",@"16栋102",@"16栋103",@"16栋104",@"16栋105",@"16栋106"]];
NSArray *tag = @[@"list1",@"list2",@"list3"];
NSArray *title = @[@"一楼",@"二楼",@"三楼"];
for (int i = 0; i<list.count; i++) {
section = [XLFormSectionDescriptor formSection];
[form addFormSection:section];
//所属区域
row = [XLFormRowDescriptor formRowDescriptorWithTag:tag[i] rowType:XLFormRowDescriporListTitle title:title[i]];
//value
row.value = list[i];
[section addFormRow:row];
}
然后实现通知
直接找到需要改变的cell的tag给他赋值传过来的高度
-(void)setFormCellHeight:(NSNotification *)notification{
NSDictionary*dic = notification.object;
XLFormRowDescriptor *row = [self.form formRowWithTag:dic[@"data"]];
row.height = [dic[@"height"] floatValue];
}
注意
主要就是在自定义cell里面的问题了。
继承XLFrom的BaseCell
里面有个configure配置cell里的界面
-(void)configure{
[super configure];
//这个地方就是需要搭建的界面的代码
[self setBackgroundView];
}
然后在BaseCell里面有个update给定义的视图做赋值操作
-(void)update{
[super update];
//先赋值 然后获取到整体界面的高度
//获取到之后取到高度
//然后取到当前Cell的tag self.rowDescriptor.tag
NSString *height = [NSString stringWithFormat:@"%lf",_cellHeight+40];
NSDictionary *notificationData = @{@"data":self.rowDescriptor.tag,@"height":height};
//最后通知过去就可以了
[[NSNotificationCenter defaultCenter]postNotificationName:setFromCellHeightNSNotification object:notificationData];
}
最后XLFrom一些简单的用法我之前的文章里面有写到过,可以去看看