Ограничения UITableViewCellAccessoryCheckmark и AutoLayout

У меня есть пользовательский UITableViewCell и управлять выбором моих ячеек. Когда ячейка выбрана и отображается галочка, ширина ячейки Content View уменьшается, а мои метки с конечными ограничениями перемещаются влево. Как я могу эффективно избежать перемещения контента?

Я не хотел устанавливать ограничения для ведения, поскольку у меня гибкая ширина таблицы, и они выравниваются по правому краю. Когда я хочу обновить ограничения меток в коде через IBOutlets, я столкнулся с проблемой, поскольку возвращаю несколько подклассов UITableViewCell в cellForRow:, и я получил нераспознанную ошибку выбора в didSelectRowAtIndexPath: при попытке установить ограничения в коде. Любое элегантное решение? Спасибо.

enter image description here

enter image description here

Ответ 1

Это поведение по дизайну.

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

Ответ 2

У меня была аналогичная (на самом деле, точная) проблема, когда галочка выталкивала все влево.

- EDIT:

Через несколько часов после моего первоначального ответа я понял, что это очень простая проблема.

Это нажатие влево - это ограничение, нажимающее contentView ячейки. Так?

Соедините ограничение с элементом справа (например, кнопкой i), самой ячейкой, а не ее содержимым.

Ограничение на просмотр ячеек



- Оригинальный ответ (фактический ответ сверху, это для записи):

Я только что понял там очень простое решение. У меня была кнопка, которая была нажата налево, когда галочка была включена, и мне пришлось удерживать ограничение, чтобы держать ее на месте (так что "снять флажок" не будет перемещать кнопку вправо). Это была жесткая "ширина" справа и в целом только плохая практика. Неважно, что я не мог "получить" эту галочку "ширина", чтобы сделать это динамически.

Решение

Удерживайте ограничение слева.

Что это. У меня тоже есть ярлык, поэтому в моем случае: ограничение от кнопки слева до метки (чтобы они не перекрывались) и из содержимого слева налево. В принципе, все, что движется справа, действительно не "достигает" левой стороны (скорее всего, все "сидит" справа).

Ячейка с ограничениями слева

Ответ 3

Как насчет того, чтобы постоянно ставить галочку и просто играть с альфа/прозрачностью?

    if checked
    {
        cell.accessoryType = .checkmark
        cell.tintColor = cell.tintColor.withAlphaComponent(1)
    }
    else
    {
        cell.accessoryType = .checkmark
        cell.tintColor = cell.tintColor.withAlphaComponent(0)
    }