it-roy-ru.com

Они добавили больше дополнения к UITableVIew в iOS 11?

Это только я или они добавили намного больше отступов в верхние и нижние колонтитулы сгруппированных UITableViews в iOS 11?

Я скомпилировал свое приложение для работы с iOS 11 и заметил дополнительные отступы .... Я вроде решил это, установив для contentInset.top отрицательное значение, проверяя, является ли ОС iOS 11, но это уродливый обходной путь.

Есть ли какой-либо другой лучший способ отменить дополнительное заполнение сгруппированных табличных представлений, чтобы достичь одинаковых результатов во всех поддерживаемых iOS? Отчасти воняет иметь несколько проверок на такую ​​глупую вещь.

Снимок экрана для сравнения:

 iOS 10 vs iOS 11 UITableView comparison

Как вы можете видеть, в iOS 11 есть дополнительное расстояние между разделами (да, это разделы!).

8
Phillip

Это новый параметр contentInsetAdjustmentBehavior в UIScrollView, который можно установить как .never, чтобы избежать дополнительного заполнения

if #available(iOS 11.0, *) {
    tableView.contentInsetAdjustmentBehavior = .never
}

или в раскадровке под инспектором размера

 enter image description here

12
Rashid

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

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    return nil;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0.1;
}

Это сделает ваш табличный вид похожим на то, что вы имели в iOS 10, а также не окажет никакого влияния на предыдущие версии iOS. Вы можете сделать то же самое для заголовка, если вам не нужны заголовки.

3
Bms270

Вам просто нужно установить верхний и нижний колонтитул табличного представления.

- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    return [[UIView alloc] init];
}
- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] init];
}
2
wangjx

С моим .grouped UITableView я столкнулся с той же проблемой в iOS 11, она работала нормально, когда я использовал UITableViewController, но не в UIViewController, в моем случае сработало следующее:

tableView.estimatedSectionHeaderHeight = 0

Без вышеуказанной строки tableView(heightForHeaderInSection никогда не вызывается.

Похоже, ошибка в iOS 11.

0
AamirR

Я решил свою проблему, установив верхний и нижний колонтитулы в раскадровке. Очевидно, в Xcode 9 это значения по умолчанию при создании UITableView

 enter image description here

Я попытался установить их на 0, но 1 является минимумом, и это решило проблему. Кроме того, я проверил, как он ведет себя, если automatic проверен, и он работает также.

Кроме того, я не знаю, это ошибка или что-то, но я не мог сделать это на существующей таблице. Мне нужно было удалить его и снова перетащить в UIViewController.

0
Đorđe Nilović

Если ответ Рашида не сработал с настройкой contentInsetAdjustmentBehavior, чтобы никогда не делать то попробуйте следующее:

self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0
self.tableView.estimatedSectionFooterHeight = 0

iOS 11 плавающий заголовок TableView

0
Luca Ventura

У меня была похожая проблема, я думаю, что это была ошибка в старом Xcode.

Если вы используете autolayout, и у вас есть Content View и представления внутри этого, Ограничение полей не работало в Xcode 8, теперь исправлено в xCode 9. Вы должны повторить свои ограничения и снять флажок в View внутри всей таблицы. просмотреть клетки. Это будет согласовано на всех устройствах ios 10 и ios 11. 

 enter image description here

0
Hannah Louisa Carney