UILabel ломается рано внутри UIStackView - PullRequest
0 голосов
/ 03 мая 2018

Учитывая иерархию представления:

UIStackView
--UILabel
--UISwitch

Метка разрывается слишком рано, даже если ее можно разместить на одной строке.

Настройка numberOfLines = 1 заставляет этикетку быть правильно размеченной.

Как заставить UILabel выполнять разрыв строки только при необходимости?

Код:

  private lazy var title: UILabel = {
    let v = UILabel()
    v.numberOfLines = 0
    return v
  }()

  private lazy var toggle = UISwitch()
  private lazy var stack = UIStackView(axis: .horizontal,
                                       distribution: .equalSpacing,
                                       alignment: .center,
                                       views: [title,
                                               toggle])
  func setupConstraints() {
    stack.snp.makeConstraints { (make) in
      make.edges.equalTo(contentView.layoutMarginsGuide)
    }
  }

Результат: Bug

Настройка numberOfLines = 1 дает мне то, чего я хотел бы достичь, но метка теряет свою многострочную функциональность:

Desired behavior

Как заставить желаемое поведение без потери поддержки многострочных меток?

При наличии большого горизонтального пространства метка правильно размещается независимо от свойства numberOfLines:

enter image description here

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Установите для вашего UISwitch контентное значение и приоритет сопротивления равным 1000.

И распределение стеков и выравнивание по fill.

Дополнительное примечание - если вы хотите, чтобы метка и переключатель были выровнены сверху, установите выравнивание на top.

0 голосов
/ 03 мая 2018

В вашем стековом представлении вы можете задать ограничение для вашей метки и переключиться ...

1) задайте ограничения на ведущие, верхние, конечные и нижние метки. Не давайте ограничение ширины. В трейлинг-ограничении возьмите второй пункт Switch.

2) задайте трейлинг переключателя, верх, низ и фиксированную ширину.

Надеюсь, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...