Пользовательский UIView Перерисовывающий Контроллер Представления - PullRequest
0 голосов
/ 22 сентября 2018

Мой первый пост, поэтому я надеюсь, что я делаю правильные вещи.

У меня есть пользовательский UIView, который содержит массив пользовательских UIButtons.

Я переопределил func draw (_ rect: CGRect), который имеет следующий код:

  override func draw(_ rect: CGRect) {

    // remove all buttons currently on the bar
    self.subviews.forEach { $0.removeFromSuperview() }

    // process all buttons that are not hidden
    var i = 0
    for btn in buttons {
      if !btn.button.isHidden {
        self.addSubview(btn.button)

        // set constraints with SnapKit
        btn.button.snp.makeConstraints { (c) in
          c.size.equalTo(buttonSize)
          c.left.equalToSuperview().offset(padding.width + (isVertical ? 0 : (i * buttonSize.width)))
          c.top.equalToSuperview().offset(padding.height + (isVertical ? (i * buttonSize.height) : 0))
        }

        i += 1
      }
    }

    // set button bar's constraints
    snp.updateConstraints { (c) in
      if isVertical {
        c.height.equalTo(max(visibleCount, 1) * buttonSize.height + 2 * padding.height)
      } else {
        c.width.equalTo(max(visibleCount, 1) * buttonSize.width + 2 * padding.width)
      }
    }

  }

Всякий раз, когда я выполняю setNeedsLayout (), он работает, как ожидалось, однако он также центрирует UIImage в том же суперпредставлении.

Это вызывает проблемыпоскольку UIImage можно панорамировать и перецентрировать, это не ожидаемое поведение.

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

Конечно, это не то поведение, которое мне нужно.

Любая помощь / идеи / предложения приветствуются.

Порядок добавления подпредставлений в ViewController такой...

  private func setupViews() {
    view.backgroundColor = .green

    view.addSubview(mapDisplay)
    view.addSubview(contextMenu)
    view.addSubview(FloatingMenu)

  }

1 Ответ

0 голосов
/ 22 сентября 2018

Я сам решил эту проблему после того, как разобрал свой код.

Оказалось, что у меня был пустой заполнитель ограничения для рассматриваемого UIImageView, и что SnapKit принимает пустое ограничение в качестве явной директивы "удалите «все ограничения» и сбросьте соответствующий элемент обратно на «ноль», когда что-то еще требует обновления.

Я думаю, что это поведение ошибочно, так как мой UIView был дочерним подпредставлением в View Controller, однако там оно есть... делает что-то вроде

mapDisplay.snp.makeConstraints {(c) в

}

, чтобы UIImageView (mapDisplay) снова привязывался к центру экрана длякакая-то причина, когда UIView обновляет позиции кнопок.

Должен опубликовать это на своем gitHub, я думаю.

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