У меня есть две метки, расположенные горизонтально в моем TableViewCell. Правый должен использовать столько места, сколько ему нужно, а тот, что слева, должен использовать оставшееся пространство. В случае, когда длина двух меток больше ширины ячейки, левая метка должна быть обрезана, чтобы у правой было достаточно места для полного отображения. Метки выровнены по соответствующим сторонам, если это имеет значение.
Опция «Упорядочить > Заполнить контейнер по вертикали» в Инспекторе размеров аналогична тому, что мне нужно для левой метки, но я хочу, чтобы она занимала только пространство, не нужное правой метке.
Если я добавлю ограничение к конечному пробелу на левой метке (см. третье ограничение ниже), результат будет почти таким, как мне нужно, но вместо того, чтобы правая метка давала необходимое пространство, левая метка занимает необходимое пространство (см. финальное изображение).
sizeToFit
, чтобы содержимое метки стало ее внутренней шириной), а затем вычислив ее ширину вlayoutSubviews
и используя эту ширину как (отрицательную ) константа для привязки ширины левой метки. При программном подходе вы можете лучше учитывать крайние случаи, связанные с шириной метки и изменением положения. Это в основном то, что API сжатия и объятий делает за кулисами, но я предпочитаю управлять этим вручную, потому что никаких сюрпризов не будет. - person liquid   schedule 05.04.2018