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

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

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

Таблица с пользовательскими ячейками и автоматическим макетом

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

Содержимое пользовательской ячейки не перемещается при автоматической компоновке

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

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


person JefferyRPrice    schedule 21.10.2012    source источник
comment
Пока нет - я только что вернулся к использованию стоек и пружин. Все еще надеюсь, что кто-то может объяснить, как заставить его работать с Auto Layout.   -  person JefferyRPrice    schedule 26.10.2012
comment
Та же проблема здесь. Тот же учебник. Надеюсь, кто-то может дать ответ.   -  person vichudson1    schedule 30.10.2012


Ответы (2)


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

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

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

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

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

person Sandeep Ankam    schedule 03.12.2012

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

person MarekM    schedule 10.07.2015