Высота UITableviewCell в соответствии с In side другая высота UITableviewCell - PullRequest
0 голосов
/ 20 ноября 2018

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

Существует формат данных JSON, который я должен отобразить в UITableview.Данные меню ресторана.Я создаю Table 1 для MainTitle отображения и Table 1 ячейку внутри другой UITableview Table 2 для Subtitle and item Subtitle, установленной в качестве заголовка и item в качестве строки.

Высота ячейки таблицы просмотра является динамической, поэтому яустановите его UITableViewAutomaticDimension для обоих таблиц.Table 1 высота ячейки устанавливается в соответствии с внутренней высотой Table 2.Table 2 не прокручивается, его высота соответствует высоте содержимого.

Итак, я хочу установить Table 1 cell высоту после загрузки Table 2 всех данных.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Я бы порекомендовал использовать одно представление таблицы, как упомянуто @trungduc и @Raj D

Вы должны иметь возможность использовать настраиваемую ячейку представления таблицы для разметки элементов так, как вы хотите, и вы всегда можете использоватькнопки для элементов, которые должны быть активными (например, если вам нужно нажать на элементы меню и показать другой контроллер представления).

Вот базовый макет того, что я имею в виду enter image description here:

Вы захотите использовать представление стека в ячейке, а затем динамически генерировать элементы меню на основе вашей модели данных поддержки (это должно позволить ему получить правильный внутренний размер контента для UITableViewAutomaticDimension для правильного размера ячеек).

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];
    }
}

В зависимости от того, как вы структурируете свою модель, методы табличного представления будут выглядеть примерно так:

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

0 голосов
/ 20 ноября 2018

Вы можете использовать правильные секции и строки UITableView. Добавьте «MainTitle» как раздел таблицы и «Items» MainTitle как строки раздела.

...