2017-02-15 2 views
5

Я сделал приложение для iOS 8, которое использует сгруппированную UITableView для одной из своих страниц. В нем есть несколько разделов, которые используют CGFloat.leastNormalMagnitude (или CGFloat.min в Swift 2 и ниже) для высоты раздела и высоты нижнего колонтитула, чтобы удалить пространство по умолчанию. Все шло хорошо, пока приложение запуск в прошивке 9 и 10, где он выходит из строя с этой ошибкой:Возврат CGFloat.leastNormalMagnitude для заголовка раздела UITableView вызывает сбой

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'section header height must not be negative - provided height for section 0 is -0.00000'

Так или иначе, любое значением при 1 (кроме закругленных 0) рассматриваются как отрицательная - и используя 1 как возврат значение снова запустит пространство заголовка/нижнего колонтитула.

Есть ли обходное решение, чтобы исправить это?

Заранее спасибо.

+0

Значит, CGFloat.leastNormalMagnitude обрабатывается как отрицательный или любое значение под 1.0 считается отрицательным? – user3581248

+0

да, и я не знаю почему: | – edopelawi

+0

Вы пытались вернуть только '0'? Это работает для меня – redent84

ответ

7

Я пытался несколько значений для tableView(_:heightForHeaderInSection:), и выяснили, что:

  • leastNormalMagnitude и leastNonzeroMagnitude будут рассматриваться как минус (отсюда и аварии).
  • Zero заставит TableView вернуть высоту по умолчанию в виде верхнего/нижнего колонтитула.
  • Все, что угодно между нулем и одним, будет рассматриваться как минус.
  • Один из них заставит TableView вернуть высоту по умолчанию.
  • Все, что более одного (например, 1.1), установит верхний/нижний колонтитул на фактическую высоту.

Я решил использовать 1.1 для решения моей проблемы.

Надеюсь, это поможет кому-то там!

+0

Я не понимаю, как вы решили проблему, установив 1.1. Если вы установите высоту в 1.1, вы все равно получите ненулевое значение пространство для заголовка раздела вправо? – Salah

+0

@ Салах, да, я закончил заполнение пространства 1.1 видом, который использует тот же цвет фона с табличным представлением. – edopelawi

0

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

tableView.sectionHeaderHeight = UITableViewAutomaticDimension 
tableView.estimatedSectionHeaderHeight = CGFloat.leastNormalMagnitude 

Но если я устанавливаю мой контроллер в качестве делегата (UITableViewDelegate) для моего табличном и реализации:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return CGFloat.leastNormalMagnitude 
} 

тогда работы

+0

Благодарим вас за ответ, но моя проблема возникла с помощью набора' UITableviewDelegate', не задавая «sectionHeaderHeight» tableView и 'оцененныйSectionHeaderHeight 'вручную :( – edopelawi

0

Возможно, CGFloat.leastNonzeroMagnitude - это то, что вам нужно!

+0

Спасибо за ваш ответ, но он по-прежнему разбился с этим значением :( – edopelawi

-1

С конфигурацией вроде:

tableView.estimatedSectionHeaderHeight = 50.0; 
tableView.sectionHeaderHeight = UITableViewAutomaticDimension; 

мне удалось estimatedSectionHeaderHeight правильно работает для моих пользовательских заголовков, а также с секциями без заголовка на всех (и без пробела), после нескольких попыток, и благодаря объяснения edopelawi.

я должен был использовать этот метод (bannerObject = пользовательский вид заголовка, не bannerObject = даже не пробел):

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    id bannerObject = [self bannerObjectForSection:section]; 

    if(bannerObject) { 
     return UITableViewAutomaticDimension; 
    } else { 
     return 0.01f; 
    } 
} 

вместо этого, который даже не правильно работать с UITableViewAutomaticDimension для пользовательских заголовки:

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section { 
    id bannerObject = [self bannerObjectForSection:section]; 

    if(bannerObject) { 
     return 50.0; // UITableViewAutomaticDimension don't calculate the correct size of custom headers 
    } else { 
     return 1.1; 
    } 
} 
Смежные вопросы