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 设置了 UITableViewAutomaticDimension
。 Table 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 的高度