Автоматическая компоновка с пользовательским UITableViewCell

Как получить содержимое настраиваемого UITableViewCell для изменения и изменения размера с помощью автоматической компоновки?

Чтобы сделать проблему более ясной, я назначил contentView моей пользовательской ячейки иметь светло-серый цвет фона. Чтобы уменьшить это до наименьшей проблемы, моя пользовательская ячейка имеет только один UIImageView с именем ratingImageView, который показывает некоторое количество желтых звезд; три таких ячейки можно увидеть на изображении ниже.

Table view with custom cells and auto layout

My ratingImageView имеет только 4 ограничения; (1) width = 81, (2) height = 40, (3) выровнять центр Y для наблюдения и (4) пробел для наблюдения = 20. Я бы ожидал, что конечное пространство для ограничения супервизора будет принудительно отображать изображение слева, когда появляется стандартная кнопка удаления при удалении. Однако это не видно на изображении ниже.

Custom cell content not moving with auto layout

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

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

Ответ 1

У меня была такая же проблема, когда я отключил Autolayout ON для учебника.

Проблема связана с ограничением Horizontal Space (20). Приоритет этого ограничения устанавливается на 1000 по умолчанию, что означает высокий приоритет. Таким образом, ImageView подчиняется ограничению и делает себя неподвижным в своем положении, не перемещаясь в соответствии с представлением содержимого UITableViewCell (PlayerCell в этом случае), когда отображается кнопка delete.

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

  • Откройте панель рассказов и выберите PlayerCell и раскройте его ограничения.
  • Выберите ограничение "Horizontal Space (20)", а в инспекторе атрибутов установите его приоритет на меньшее значение.
  • В файле PlayersViewController.m добавьте следующий код в метод cellForRowAtIndexPath tableView delegate:

    UIImageView *ratingImageView = cell.ratingImageView;
    NSDictionary *dict = NSDictionaryOfVariableBindings(ratingImageView); [cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[ratingImageView]|" options:0 metrics:nil views:dict]];

Ответ 2

В моем случае я удалил правое ограничение, а затем добавил его снова, но на этот раз флажок "ограничение на маржу" не установлен. Этот флажок установлен по умолчанию.