wwmz / WMZDropDownMenu

🌹一个能几乎实现所有App各种类型筛选菜单的控件,可悬浮,目前已实现闲鱼/美团/Boss直聘/京东/饿了么/淘宝/拼多多/赶集网/美图外卖等等的筛选菜单,可以自由调用代理实现自己想组装的筛选功能和UI,且控件的生命周期自动管理,悬浮自动管理🌹(A control that can implement almost all types of filtering menus of all apps)
MIT License
723 stars 98 forks source link

更新菜单的内容,高度没有变化。 #32

Closed iT-Boyer closed 3 years ago

iT-Boyer commented 3 years ago

treeArr根据条件变更,元素数不同。调用如下更新方式,无法根据不同的内容更新菜单的高度。

[self.menu updateData:treeArr AtDropIndexPathSection:section AtDropIndexPathRow:0];

请教下,使用什么方式可以同时适配高度?

wwmz commented 3 years ago

treeArr根据条件变更,元素数不同。调用如下更新方式,无法根据不同的内容更新菜单的高度。

[self.menu updateData:treeArr AtDropIndexPathSection:section AtDropIndexPathRow:0];

请教下,使用什么方式可以同时适配高度?

适配什么高度 列表的高度吗 这个高度还要动态变化吗 你可以试着在数组里去改视图的高度 例如 [menu.showView enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj isKindOfClass:[WMZDropTableView class]]) { 。。。 } }];

iT-Boyer commented 3 years ago

使用图片描述下更新高度的场景: 商圈:有多个选项,商场:只有一个选项。 当切换到商场时,下次进入菜单的总高度高度只有一个选项的高度。这样切换到商圈时,需要更新菜单的高度。 截屏2020-09-22 上午11 10 42 我尝试在商圈/商场切换时调用下面的方法,没有作用。

//更新高度
[menu.showView enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
      if ([obj isKindOfClass:[WMZDropTableView class]]) {
           WMZDropTableView *tblview = (WMZDropTableView *)obj;
            tblview.frame = CGRectMake(tblview.frame.origin.x, tblview.frame.origin.y, tblview.frame.size.width, MAINHEIGHT*0.4);
    }
}];
//更新数据
[self.menu updateData:treeArr AtDropIndexPathSection:section AtDropIndexPathRow:0];
iT-Boyer commented 3 years ago

自定义headview时,实现头部高度时,出现偶现的问题:headview下面会多出等高的区域 截屏2020-09-22 上午11 20 56

/**
 实现这个代理会出现问题,莫名多出头部高度,暂时用默认高度35
 */
- (CGFloat)menu:(WMZDropDownMenu *)menu heightForHeadViewAtDropIndexPath:(WMZDropIndexPath*)dropIndexPath
{
    NSDictionary *dic = self.menu.titleArr[dropIndexPath.section];
    NSString *name = [dic objectForKey:@"name"];
    if ([name hasPrefix:@"商圈"]) {
        return 40;
    }
    return 0;
}
wwmz commented 3 years ago

使用图片描述下更新高度的场景: 商圈:有多个选项,商场:只有一个选项。 当切换到商场时,下次进入菜单的总高度高度只有一个选项的高度。这样切换到商圈时,需要更新菜单的高度。 截屏2020-09-22 上午11 10 42 我尝试在商圈/商场切换时调用下面的方法,没有作用。

//更新高度
[menu.showView enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
      if ([obj isKindOfClass:[WMZDropTableView class]]) {
           WMZDropTableView *tblview = (WMZDropTableView *)obj;
            tblview.frame = CGRectMake(tblview.frame.origin.x, tblview.frame.origin.y, tblview.frame.size.width, MAINHEIGHT*0.4);
    }
}];
//更新数据
[self.menu updateData:treeArr AtDropIndexPathSection:section AtDropIndexPathRow:0];

我看了一下 我会自动适配高度的呀 你看那个赶集网demo 第一个和第二个 弹出来的视图高度是自动适配的

iT-Boyer commented 3 years ago

嗯,我看下赶集网的样式,是连个菜单下自适应的高度。 我想描述的是针对一个菜单下的menu.showView中的tableView根据内容自适应高度。 上述说的商场商圈是更新这个tableView的数据源,但是高度没有自适应,导致数据无法正常展示。 test mp4

为解决数据展示正常,想到了两种方法:

  1. 针对当前tableView实现自动适配高度。
  2. 禁止自动适配,设置菜单最大高度。 针对方法2,有开放的属性的吗?
wwmz commented 3 years ago

嗯,我看下赶集网的样式,是连个菜单下自适应的高度。 我想描述的是针对一个菜单下的menu.showView中的tableView根据内容自适应高度。 上述说的商场商圈是更新这个tableView的数据源,但是高度没有自适应,导致数据无法正常展示。 test mp4

为解决数据展示正常,想到了两种方法:

  1. 针对当前tableView实现自动适配高度。
  2. 禁止自动适配,设置菜单最大高度。 针对方法2,有开放的属性的吗?

可以加下群 我这里没怎么看

iT-Boyer commented 3 years ago

方法一:

在初始化menu时,设置入参:固定下拉框的高度:

//自定义弹出视图frame
        .wCustomDataViewRectSet(^CGRect(CGRect currentRect) {
            currentRect.size.height = MAINHEIGHT*0.4;
            return currentRect;
        })

方法二:

动态更新dataView和showView中的tableView的高度

CGRect newFrame = self.menu.dataView.frame;
    newFrame.size.height = MAINHEIGHT*0.4;
    self.menu.dataView.frame = newFrame;
    [self.menu.showView enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if ([obj isKindOfClass:[WMZDropTableView class]]) {
            WMZDropTableView *tblview = (WMZDropTableView *)obj;
            CGRect tbFrame = tblview.frame;
            tbFrame.size.height = MAINHEIGHT*0.4;
            tblview.frame = tbFrame;
        }
    }];