2015-02-11 5 views
1

У меня есть UITableViewCell вот так.Изменение вида при удалении вида с использованием автоматического макета

enter image description here

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

enter image description here

Я должен скрыть Ярлык 3 в определенных условиях. Когда это произойдет, мне нужно переместить ярлык 2 и кнопку ближе, как показано ниже.

enter image description here

Я попытался добавить дополнительный вертикальный промежуток ограничение от этикетки 2 с кнопкой и установить его отношение к меньше или равно.

enter image description here

И в методе cellForRowAtIndexPath я удалить метку 3 и обновляет макет.

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier(InfoCell.identifier(), forIndexPath: indexPath) as InfoCell 

    cell.label3.removeFromSuperview() 
    cell.layoutIfNeeded() 

    return cell 
} 

enter image description here

Но как вы можете видеть расстояние между этикетки 2 и кнопка все еще там.

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

+0

Эй, если ответ был неясным или не помог решить вашу проблему, можете ли вы прокомментировать или отметить его как принятый, если он это сделал? Благодарю. –

ответ

1

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

Установив его как необязательное ограничение, вы не получите неудовлетворительный конфликт ограничений при включении ярлыка 3, а когда вы удалите метку 3, «необязательный, но высокий приоритет «ограничение будет вбито.

+0

Спасибо за ответ. Это работает, но у меня есть новая проблема. Я установил ограничение обратно равным и изменил его приоритет на 749. Я также установил константу в 10. Когда я запустил приложение, кнопка увеличила его высоту, чтобы заполнить это потерянное пространство, например [this] (http: // i. imgur.com/3a27hX2.png). Поэтому я добавил ограничение по высоте на кнопку, чтобы сохранить ее исправленной, а затем между меткой 1 и меткой 2 есть пробел, например [this] (http://i.imgur.com/yOGSTz5.png). – Isuru

1

« Меньше или равно »ничего не сделало бы, чтобы сжать интервал - вы, вероятно, предназначались для того, чтобы пространство было« больше или равно »наименьшему возможному интервалу. Если «меньше», оно может опуститься до нуля.

«больше или равно» не будет работать либо: Это постоянный источник путаницы и разочарования, потому что «больше или равно» не не означает «равный, и больше, чем если бы он должен получить больше, но только если это необходимо ». Даже если все другие размеры установлены, что определенно не относится к ячейке для самостоятельной калибровки iOS8, автоматическая компоновка не мешает сохранить размер ближе к постоянному значению равным; это больше, чтобы создать пол, который другие ограничения могут выдвигать выше, но не ниже. Мысль Auto Layout «Вы сказали« больше », а миллион больше, чем я, я удовлетворил ограничения с помощью миллиона dur dur».

Снятие вида удаляет любые ограничения, прикрепленные к нему, к представлению. Как отмечено в другом ответе, если вы добавили ограничение с более низким приоритетом, связанное с View2 и кнопкой, оно будет разбиваться по приоритету, если View3 присутствует, но нажмите, если View3 и его ограничения удалены.

Однако, поскольку ограничения удалены, у вас возникнет проблема, когда View3 будет удален и будет возвращен как часть процесса повторного использования соты. Вы можете

  1. Воссоздать ограничения с нуля при вводе View3 назад, либо в cellForRowAtIndexPath или prepareForReuse.
  2. Сохраните ограничения, влияющие на View3 перед их удалением (или все ограничения в контентном элементе cell), возможно, в свойство ячейки NSArray и восстановить их до повторного использования.
  3. Используйте другой reuseIdentifier, если view3 будет удален, и проверьте перед удалением ячейки. Отправка сообщения в нуль ничего не делает, поэтому повторение [view3 removeFromSuperview] должно быть прекрасным.
Смежные вопросы