0

У меня есть статическая таблица с двумя строками. Первая строка имеет переключатель. Я хочу включить вторую строку, только если переключатель включен. И скройте строку, когда переключатель выключен.Не удается одновременно удовлетворить ограничениям для статической таблицы

Вторая строка имеет ярлык и текстовое поле. Они оба имеют ограничения автоматической компоновки.

Я жестко прописывать высоту второго ряда следующим образом

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

    if indexPath.section == 0 && !reminderSwitch.on { 

     if indexPath.row == 1 { 

      return 0.0 

     } 

    } 

    return 44.0 

} 

его делать то, что я хочу, но я получаю следующее об ошибке/предупреждение.

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

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

+0

Почему вы не добавляете или не удаляете вторую строку, когда переключатель меняет значение? '- (void) insertRowsAtIndexPaths: (NSArray *) indexPaths withRowAnimation: (UITableViewRowAnimation) animation' – eertl

+0

Я просто пытался это сделать. Это вызывает ошибку. потому что это статическое представление таблицы, вы не можете вставить новую строку. –

ответ

0

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

IBOutlet NSLayoutConstraint *_cellVerticalSpaceConstraint; 

и

_cellVerticalSpaceConstraint.constant = 0; 

В случае у вас есть динамические ячейки, вы можете создать пользовательскую ячейку с XIb, если вы хотите или создать его программно. Я бы подошел к этому сценарию с пользовательской ячейкой, так как вы можете захотеть захватить события текстового поля и вызвать другие методы. Есть много примеров, как это:

https://medium.com/@musawiralishah/creating-custom-uitableviewcell-using-nib-xib-files-in-xcode-9bee5824e722#.ukw4zn30o

Для добавления/удаления строк можно использовать следующий код:

[self.tableView beginUpdates]; 
[self.tableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationFade]; 
[self.tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade]; 
[self.tableView endUpdates]; 

insertIndexPaths & deleteIndexPaths являются массивы NSIndexPaths, как следующее:

NSArray *insertIndexPaths = [[NSArray alloc] initWithObjects: 
    [NSIndexPath indexPathForRow:0 inSection:0], 
    nil]; 
+0

Все эти примеры используют динамическую ячейку прототипа. Я использую статическую ячейку. Невозможно обновить таблицу. Создайте статическое представление таблицы и попробуйте вставить пустую строку. Это вызовет ошибку. –

+0

Я обновил свой ответ, чтобы поддержать сценарий статической таблицы. – eertl

+0

Я попробовал это, установив константу константы на 0 и обратно до ее исходного значения. Но я все еще ошибаюсь. –

Смежные вопросы