根据在另一个UITableviewCell高度中的UITableviewCell高度

时间:2018-11-20 04:31:57

标签: objective-c uitableview ios-autolayout

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

我必须在UITableview中显示JSON数据格式。数据是餐厅的菜单。我为Table 1的显示创建了MainTitle,并在另一个Table 1的{​​{1}}内创建了UITableview Table 2单元格,其中Subtitle and item被设置为标题,Subtitle被设置为行

Tableview单元格的高度是动态的,因此我为两个tableview都设置了itemUITableViewAutomaticDimension单元格的高度是根据其内部Table 1的高度设置的。 Table 2不可滚动,其高度取决于内容的高度。

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

2 个答案:

答案 0 :(得分:0)

您可以使用正确的UITableView节和行。将“ MainTitle”添加为表部分,并将MainTitle的“ Items”添加为部分行。

答案 1 :(得分:0)

我建议使用@trungduc和@Raj D提到的单个表格视图

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

这是我的意思的基本模型enter image description here

您将要使用单元格中的堆栈视图,然后根据您的后备数据模型动态生成菜单项(这应使其获得UITableViewAutomaticDimension的正确内在内容大小,以正确调整单元格的大小。)< / p>

enter image description here

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

- (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;

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

enter image description here