UITableviewCell 高度根据 In 侧另一个 UITableviewCell 高度

Posted

技术标签:

【中文标题】UITableviewCell 高度根据 In 侧另一个 UITableviewCell 高度【英文标题】:UITableviewCell height according to In side another UITableviewCell height 【发布时间】:2018-11-20 04:31:57 【问题描述】:

MainTitle 1 Subtitle 1 ( item 1 item 2 item 3 ) , MainTitle 2 Subtitle 2 ( item 1 item 2 item 3)

我必须在UITableview 中显示 JSON 数据格式。数据是餐厅的菜单。我为MainTitle 显示创建Table 1,在另一个UITableview Table 2 中为UITableview Table 2 创建Table 1 单元格,将Subtitle 设置为标题,将item 设置为行。

Tableview 单元格高度是动态的,所以我为两个 tableview 设置了 UITableViewAutomaticDimensionTable 1 单元格的高度是根据里面的Table 2 高度来设置的。 Table 2 不可滚动,高度根据内容高度。

所以,我想在加载Table 2 所有数据后设置Table 1 cell 高度。

【问题讨论】:

我认为嵌套表格视图不是一个好主意。您应该尝试仅使用 1 个 UITableView 来处理它们 【参考方案1】:

您可以使用适当的 UITableView 部分和行。将“MainTitle”添加为 Table Section,将 MainTitle 的“Items”添加为 Section Rows。

【讨论】:

“字幕”呢【参考方案2】:

我建议使用@trungduc 和@Raj D 提到的一个单一的tableview

您应该能够使用自定义表格视图单元格以您想要的方式布局项目,并且您始终可以将按钮用于需要可点击的项目(即,如果您需要单击菜单项并显示另一个视图控制器)。

这是我的意思的基本模型:

您需要在单元格中使用堆栈视图,然后根据您的支持数据模型动态生成菜单项(这应该允许它获得正确的固有内容大小,以便 UITableViewAutomaticDimension 正确调整单元格的大小)。

下面是我在设置自定义单元格的子菜单项时动态添加菜单项的示例:

- (void)setupMenuItemsStack:(NSArray <RPMenuItem *> *)menuItems 
    for (UIView *subview in self.menuItemsStack.arrangedSubviews) 
        [NSLayoutConstraint deactivateConstraints:subview.constraints];
        [subview removeFromSuperview];
    
    for (RPMenuItem *menuItem in menuItems) 
        UIButton *menuItemButton = [UIButton buttonWithType:UIButtonTypeSystem];
        [menuItemButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
        [menuItemButton setTitle:menuItem.title forState:UIControlStateNormal];
        [self.menuItemsStack addArrangedSubview:menuItemButton];
    

根据您构建模型的方式,tableview 方法看起来会是这样的:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    return self.menuList.menus.count;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    return [[self.menuList.menus objectAtIndex:section] subMenus].count;


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
    return [[self.menuList.menus objectAtIndex:section] title];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    RPMenuTableViewCell *cell = (RPMenuTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"RPMenuCell" forIndexPath:indexPath];
    RPSubMenu *subMenu = [[[self.menuList.menus objectAtIndex:indexPath.section] subMenus] objectAtIndex:indexPath.row];
    [cell setSubMenu:subMenu];
    return cell;

菜单列表是***菜单列表,它从那里向下级联(即菜单列表包含菜单数组,菜单包含子菜单数组,子菜单包含菜单项数组)。

@property (strong, nullable) RPMenuList *menuList;

添加扩展和收缩功能(手风琴风格)以显示菜单项可能也是一个不错的选择:

【讨论】:

如果您创建了演示,请分享一下。

以上是关于UITableviewCell 高度根据 In 侧另一个 UITableviewCell 高度的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 UIImageView 的高度估计 UITableViewCell 的高度

AutoLayout根据children设置UITableViewCell的高度

如何根据 UIImageView 高度设置不同的 UITableViewCell 高度?

根据 UILabel 的高度设置 UITableViewCell 的高度

根据单元格高度在 UITableViewCell 内动态设置 UIImageView 高度

根据内容自动调整 UITableViewCell 高度