Автоматическая компоновка с пользовательским 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
В моем случае я удалил правое ограничение, а затем добавил его снова, но на этот раз флажок "ограничение на маржу" не установлен. Этот флажок установлен по умолчанию.