Когда мой вид таблицы пуст, я хочу добавить простую метку в нижний колонтитул таблицы, чтобы отобразить сообщение «без содержимого». Он отлично работал, когда я устанавливал рамки UILabel и UIView, которые я использовал для footerView, но теперь я пытаюсь преобразовать их в использование автоматического макета, и я не могу заставить его работать.Установка метки в таблицу UITableView tableFooterView - с автозапуском
Вот что я делаю:
// Create the footer
UIView *tempFooter = [[UIView alloc] init];
UILabel *atext = [[UILabel alloc] init];
tempFooter.translatesAutoresizingMaskIntoConstraints = NO;
atext.translatesAutoresizingMaskIntoConstraints = NO;
atext.numberOfLines = 0;
[atext setText:@"Add Some Text"];
atext.textAlignment = NSTextAlignmentCenter;
atext.font = [UIFont italicSystemFontOfSize:14];
atext.textColor = [UIColor grayColor];
atext.backgroundColor = [UIColor clearColor];
atext.lineBreakMode = NSLineBreakByWordWrapping;
// add label to footer view, and add constraints
[tempFooter addSubview:atext];
NSLayoutConstraint *tvatt1 = [NSLayoutConstraint constraintWithItem:tempFooter
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:atext attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:10.0];
NSLayoutConstraint *tvatt2 = [NSLayoutConstraint constraintWithItem:tempFooter
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:atext
attribute:NSLayoutAttributeRight
multiplier:1.0
constant:10.0];
NSLayoutConstraint *tvatt3 = [NSLayoutConstraint constraintWithItem:tempFooter
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:atext
attribute:NSLayoutAttributeTop
multiplier:5.0
constant:0];
NSLayoutConstraint *tvatt4 = [NSLayoutConstraint constraintWithItem:tempFooter
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:atext
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant: 0];
[tempFooter addConstraints: @[tvatt1, tvatt2, tvatt3, tvatt4]];
// set the footerview
self.tview.tableFooterView = tempFooter;
Когда я запускаю это, я получаю аварии:
2014-09-08 19: 57: 16,594 SimpleList [49442: 60b] * отказ Утверждения в - [UITableView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2935.137/UIView.m:8794 2014-09-08 19: 57: 21,073 SimpleList [49442: 60b] * Согласующего приложение из-за uncaught исключение 'NSInternalInconsistency Исключение ", причина: 'Автоматическая компоновка по-прежнему требуется после выполнения -layoutSubviews. реализация UITableView о -layoutSubviews нужно вызвать супер
Я не уверен, что я делаю неправильно. Я также попробовал установить ограничения для self.tview.tableFooterView
по адресу tempFooter
(закрепление на всех четырех сторонах), но это не изменит крушение. Я также звоню:
[self.tview.tableFooterView layoutSubviews];
, но это тоже не помогает.
Любые идеи, что я делаю неправильно?
Попробуйте закомментировать строку, tempFooter.translatesAutoresizingMaskIntoConstraints = NO; и посмотреть, устраняет ли это проблему. – rdelmar
Нет, к сожалению, приводит к другому сбою: 2014-09-08 22: 46: 19.905 Невозможно одновременно удовлетворить ограничения. Вероятно, хотя бы одно из ограничений в следующем списке - это то, которое вы не хотите .... ( "", " " ) –
Эта новая ошибка вызвана отсутствием высоты, установленной для представления нижнего колонтитула (так что это будет 0), но с ограничениями на сверху и снизу, для метки, которая имеет ненулевую высоту. См. Мой ответ. – rdelmar