Центр UIView в контейнере без прыжков - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть такая структура:

  • контейнер (UIView)
    • Заголовок (UIView)
    • TableView
      • CollectionView
      • CollectionView
      • CollectionView

Когда нажата любимая кнопка, я хочу, чтобы представление отображалось поверх всего и былопо центру.Всякий раз, когда он добавляется, когда tableView не прокручивается, он работает нормально.Однако при добавлении после прокрутки весь макет переходит на свое место.Чем больше прокрутки, тем больше прыжков.Визуальное представление макета:

https://gyazo.com/8ddc75ce1ac96ff00aa9a9d8b0d4b725

Вид загружается из XIB и центрируется в его контейнере.Якоря высоты и ширины вида уже установлены (и переводит AutoresizingMaskIntoConstraints в false).Вот метод настройки представления, которое будет центрировано.

public func configure(viewToCenterItselfInside: UIView) {
        self.centerXAnchor.constraint(equalTo: viewToCenterItselfInside.centerXAnchor).isActive = true
        self.centerYAnchor.constraint(equalTo: viewToCenterItselfInside.centerYAnchor).isActive = true

        UIView.animate(withDuration: 0.5) {
            self.alpha = 1
        }

        DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(1500)) {
            UIView.animate(withDuration: 0.5, animations: {
                self.alpha = 0
            }) { (_) in
                self.removeFromSuperview()
            }
        }
    }

Вот код, когда представление загружается

if let addedFavorite = Bundle.main.loadNibNamed("ConfirmationView", owner: nil, options: nil)?.first as? ConfirmationView {
            view.addSubview(addedFavorite)
            addedFavorite.configure(viewToCenterItselfInside: view)
        }

В дополнение к попытке решить его с ограничениями I 'Мы также пытались центрировать его с помощью self.center = viewToCenterItselfInside и возиться с UIScreen.main без каких-либо результатов.Есть идеи?

...