UIStackView сдвигает контент влево, когда внутренние виды скрыты - PullRequest
0 голосов
/ 14 декабря 2018

У меня 3 кнопки внутри горизонтального вида стека.Я хочу сдвинуть кнопки влево, если одна или две кнопки скрыты.Это в основном операция левого смещения.Я пробовал несколько вариантов с видом стека в раскадровке, но не уверен, что я на правильном пути.

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

Ответы [ 4 ]

0 голосов
/ 14 декабря 2018

Очень просто.Выполните следующие шаги.

1) Сначала укажите правильные значения Constrain для StackView после настройки всех трех изображений в нем.

2) Затем задайте фиксированную ширину дляпредставление стека. И создайте выход StackView Constrain Width.Проверьте изображение.

@IBOutlet var discardWidth: NSLayoutConstraint!

enter image description here

3) Подсчитайте StackView width с помощью 2 images.В моем случае ширина stackView with 3 images равна 100px, а с 2 images это 69px.

4) Кодирование выполняется следующим образом.

     if // **Your Condition** {
            img1.isHidden = true
            discardWidth.constant = 69
        } else {
            img1.isHidden = false
            discardWidth.constant = 100

Простое право.Это просто покажет вам правильное изображение без растягивания изображения.Проверьте изображение ниже.

enter image description here

0 голосов
/ 14 декабря 2018

Если у вас есть стековое представление без установленных ограничений, размер стекового представления соответствует размеру его содержимого.Допустим, скобки [] были вашим стековым представлением, а X представляет ваши кнопки, если вы зададите стековому представлению только ведущее ограничение, вертикальное ограничение любого вида и установите для распределения значение «Fill Equally», оно будет вести себя следующим образом:

--- 8px --- [XXXX]

удалить / скрыть одну кнопку:

--- 8px --- [XXX]

Звучиткак поведение, которое вы ищете.

Еще одно примечание: если кнопки не распределены поровну по вашему стековому представлению, даже если у вас установлено распределение «Fill Equally», обязательно дайте первую кнопку (или больше)) ограничение ширины и высоты.

0 голосов
/ 14 декабря 2018

Обновление конечного ограничения стека при скрытии кнопки.

@IBOutlet weak var stackViewTrailing: NSLayoutConstraint!

func hideButton(button: UIButton) -> Void {
     button.isHidden = true

     stackViewTrailing.constant += button.frame.width
}
0 голосов
/ 14 декабря 2018

Подключите IBOutlet к вашим кнопкам.Теперь поставьте некоторые условия на ваши кнопки.И когда эти условия будут выполнены, вы можете установить выравнивание вашей кнопки влево.Попробуйте это программно.

// These are IBOUtlet Collections
@IBOutlet var buttons: [UIButton]!
@IBOutlet var hideButtons: [UIButton]!

override func viewDidLoad() {
  super.viewDidLoad()
  configureButtons()
}

private func configureButtons() {
  for (index, button) in buttons.enumerated() {
    button.tag = index
    button.addTarget(self, action: #selector(buttonPressed(_:)), for: .touchUpInside)
  }
  for (index, button) in hideButtons.enumerated() {
    button.tag = index
    button.addTarget(self, action: #selector(hidePressed(_:)), for: .touchUpInside)
    button.setTitle("Show", for: .selected)
  }
}

@objc private func hidePressed(_ sender: UIButton) {
  sender.isSelected = !sender.isSelected

  buttons[sender.tag].isHidden = sender.isSelected

  var totalHiddenCount = 0
  for button in buttons {
    if button.isHidden == true {
      totalHiddenCount += 1
    }
  }
  for button in buttons {
    if totalHiddenCount >= 2 {
      button.contentHorizontalAlignment = .left
    } else {
      button.contentHorizontalAlignment = .center
   }
  }
 }

@objc private func buttonPressed(_ sender: UIButton) {}

enter image description here

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