Проблемы с iPhone X TableView Footer - PullRequest
0 голосов
/ 04 ноября 2018

Хорошо, сначала две вещи: я все еще новичок в разработке для iOS, и я уверен, что на этот вопрос уже отвечали несколько раз, так что не стесняйтесь связать его с рабочим решением ?

Теперь к проблеме: у меня есть UITableViewController , включая пользовательских представлений нижнего колонтитула . (Они обычно добавляют небольшую рамку внизу, нижний колонтитул просто серый). Все выглядит хорошо для старых школьных iPhone, однако на новых X я получаю следующее:

Footer is broken

Есть ли способ расширить вид нижнего колонтитула до нижней части области просмотра?

1 Ответ

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

По умолчанию это макет из-за безопасной области. Если вы хотите, чтобы нижний колонтитул охватывал содержание, я могу предложить вам 2 решения.

  • Используйте взамен UITableViewStyleGrouped, но нижний колонтитул не будет статичным на экране.

  • Я не думаю, что это лучшая практика, но я думаю, что макет должен быть именно тем, что вы ищете. Это немного сложно. Шаг:

    1. Создать расширенный вид, чтобы высота была равна нижней безопасной зоне .
    2. Поместите этот расширенный вид под нижний колонтитул и установите цвет фона такой же, как и цвет фона заголовка.
    3. Убедитесь, что заголовок высота равен высоте нижней безопасной области . (Этот шаг является хитрым моментом)

Пример кода

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    UILabel *footerView = [[UILabel alloc] init];
    footerView.backgroundColor = [UIColor colorWithRed:0.968 green:0.968 blue:0.968 alpha:1]; //Section Header Background Color
    footerView.textAlignment = NSTextAlignmentRight;
    footerView.text = @"Footer";

    UIView *extendView = [[UIView alloc] init];
    extendView.translatesAutoresizingMaskIntoConstraints = NO;
    extendView.backgroundColor = footerView.backgroundColor;
    [footerView addSubview:extendView];

    [footerView addConstraints:@[
                                 [NSLayoutConstraint constraintWithItem:extendView
                                                              attribute:NSLayoutAttributeTop
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:footerView
                                                              attribute:NSLayoutAttributeBottom
                                                             multiplier:1.0
                                                               constant:0],
                                 [NSLayoutConstraint constraintWithItem:extendView
                                                              attribute:NSLayoutAttributeCenterX
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:footerView
                                                              attribute:NSLayoutAttributeCenterX
                                                             multiplier:1.0
                                                               constant:0],
                                 [NSLayoutConstraint constraintWithItem:extendView
                                                              attribute:NSLayoutAttributeWidth
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:footerView
                                                              attribute:NSLayoutAttributeWidth
                                                             multiplier:1.0
                                                               constant:0],
                                 [NSLayoutConstraint constraintWithItem:extendView
                                                              attribute:NSLayoutAttributeBottom
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:footerView
                                                              attribute:NSLayoutAttributeBottom
                                                             multiplier:1.0
                                                               constant:self.view.safeAreaInsets.bottom]
                                 ]];
    return footerView;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return self.view.safeAreaInsets.bottom;
}

Запись экрана GIF

Ссылка (Я новичок в stackoverflow, не могу опубликовать изображение напрямую. Извините!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...