UITableView сгруппированный набор цвет фона прозрачный

Вот как выглядит мой взгляд :

Введите описание изображения здесь

И это то, как я хочу, чтобы это было (игнорируя цвет текста)

Введите описание изображения здесь

Как вы видите, вид между заголовками должен быть очищен. Но этого не происходит.
Вот как я реализую modal ViewController :

ActivityFilterViewController *filter = [[ActivityFilterViewController alloc] init];
    filter.view.backgroundColor = [UIColor clearColor];
    [filter setModalPresentationStyle:UIModalPresentationCurrentContext];
    [self presentViewController:filter animated:YES completion:nil];  

ActivityFilterViewController :

Я установил UITableViewсгруппированный as и установил высоту верхнего и нижнего колонтитулов разделов как 10. А также очистил цвет фона вида заголовка.

5 ответов

  1. Если ios version is lower then 8.0затем следует установить modal presentationstyle в UIModalPresentationCurrentContextto self. что-то вроде,

       self.modalPresentationStyle = UIModalPresentationCurrentContext;
    

    Если вы используете навигационный контроллер, то,

      self.nnavigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
    

    Если два navihation контроллер для достижения этого представления, то,

     self.navigationController.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
    

    Если версия iosgreater or equal to 8.0, то модальный стиль презентации должен быть UIModalPresentationOverCurrentContextи должен установить для просмотра контроллера, который вы хотите представить как,

      filter.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    

    Если вы сделали эту настройку, проверьте, что цвет фона каждого слоя установлен в clear colorфильтр VC.

    Необходимо отладить иерархию представлений, чтобы проверить, сколько слоев находится между ними.

    Надеюсь, это поможет 🙂

  2. Используйте пользовательский контроллер представления. Не ActivityController.
    Создайте его так, как вам нравится, и представьте его в текущем контексте.

    Нет необходимости в UITableView, так как вы не прокручиваете его в любом случае.

    Просто используйте закругленные углы для обоих подвидов.

    Если вы можете скрыть одну кнопку во время выполнения, Вы можете использовать UIStackView, чтобы макет автоматически изменялся.

  3. Можно добавить подвида с a UITableViewк a UIAlertController.

    1 Создайте UIAlertController.

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil
                                                                       message:nil
                                                                preferredStyle:UIAlertControllerStyleActionSheet];
    

    2 Создайте вложенное представление с помощьюUITableView

        UIVisualEffect *blurEffect;
        blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    
        UIVisualEffectView *detailsView;
        //Let's match the cornerRadius the iOS Style
        if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
            detailsView = [[UIVisualEffectView alloc] initWithFrame:CGRectMake(0, -120, alertController.view.frame.size.width-20, 110)];
            detailsView.layer.cornerRadius = 15;
        } else {
            detailsView = [[UIVisualEffectView alloc] initWithFrame:CGRectMake(0, -120, alertController.view.frame.size.width-16, 110)];
            detailsView.layer.cornerRadius = 5;
        }
    
        detailsView.effect = blurEffect;
        detailsView.layer.masksToBounds = YES;
        detailsView.alpha = 1;
        detailsView.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.74];
    
        //Add the UITableView
        UITableView *menuTableView = [[UITableView alloc]initWithFrame:detailsView.frame style:UITableViewStylePlain];
        [detailsView addSubview:menuTableView];
    

    3 Добавьте действие и представлениеUIAlertController

        UIAlertAction* resetAction = [UIAlertAction actionWithTitle:@"Reset to default"
                                                               style:UIAlertActionStyleDefault
                                                             handler:^(UIAlertAction * action){
    
        //Reset the switches in your UITableViewCells
    
        }];
    
    
        UIAlertAction* saveAction = [UIAlertAction actionWithTitle:@"Save"
                                                               style:UIAlertActionStyleCancel
                                                             handler:^(UIAlertAction * action){
    
        //Save 
    
        }];
    
        [alertController addAction:resetAction];
        [alertController addAction:saveAction];
    
        // Add the Subview with the UITableView
        [alertController.view addSubview:detailsView];
    
        [self presentViewController:alertController animated:YES completion:nil];
    
  4. Шаги 1 и 2 ниже уже были сказаны другими, но я собираюсь сказать это здесь в любом случае для полноты моего ответа.

    Шаг 1, Установите вид таблицы фон прозрачный:

    self.tableView.backgroundColor = [UIColor clearColor];
    

    Шаг 2, Как вы уже заявили, Вы должны установить высоту путем переопределения heightForHeaderInSectionметода (в вашем случае, 10):

    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    {
        return 50.0;
    }
    

    Шаг 3, предоставьте пользовательское представление, переопределив viewForHeaderInSectionметод (Примечание-здесь вы должны установить цвет фона, чтобы очистить):

    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        UIView * header = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.oTableView.frame.size.width, 10)];
        header.backgroundColor = [UIColor clearColor];
    
        return header;
    }
    

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

    Вы можете сделать это одним из двух способов:

    1. Измените UITableViewCellреализацию, чтобы создать скругленные углы (только верхний левый и верхний правый, если первая ячейка в разделе; только нижний левый и нижний правый, если последняя ячейка в разделе).
    2. Настройте настраиваемое представление, которое вы создаете в viewForHeaderInSectionпереопределении, чтобы обеспечить эффекты закругления угла (добавьте подвиды к headerпредставлению, которое вы возвращаете в этом методе), но это добавит больше места в верхней (первая ячейка) или верхней и нижней (последняя ячейка) ячеек в разделе.
  5. Попробовать это:

    viewDidLoad:

    tableView.backgroundColor = [UIColor clearColor];
    

    Или выше не работает,

    tableView.backgroundView = nil;