Swift UIView изменяет размер своего кадра без какого-либо ввода - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь создать приложение, которое имитирует поведение карт в AppStore. Мой текущий способ сделать это состоит в том, чтобы создать копию ячейки представления коллекции (пользовательский UIView, который я загружаю в ячейку), когда она выбрана, добавить ее в представление в том же фрейме, что и ячейка, и развернуть ее оттуда. , Тем не менее, даже несмотря на то, что я могу назначить правильный кадр для представления, через некоторое время после завершения «didSelectItemAt» представление меняет свой кадр на origin (0,0) и минимальную ширину и высоту, чтобы соответствовать его содержимому.

Одна интересная вещь, которую я заметил, это то, что я могу оживить ее и увидеть, как она движется от предполагаемого начала к (0,0). Это если я использую UIView.animate в течение нескольких секунд (или использую CMD-T для медленной анимации) и вставляю self.view.layoutSubviews () в блок анимации.

    var currentView:AirportView?

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if let cell = collectionView.cellForItem(at: indexPath) as? AirportCollectionViewCell {
            whiteView.alpha = 0.3

            currentView = .get()
            self.view.addSubview(currentView!)
            currentView!.frame = self.view.convert(cell.frame, from: self.collectionView)
            print("Relative     frame is \(self.view.convert(cell.frame, from: self.collectionView))")
            print("Current view frame is \(currentView!.frame)")
        }
    }

    @objc func reset(_ sender: UIView) {
        print("Reset cview frame is \(currentView!.frame)")
        whiteView.alpha = 0
        currentView?.removeFromSuperview()
        currentView = nil
        self.collectionView.isScrollEnabled = true
    }

Вот вывод из операторов print:

Relative     frame is (0.0, 136.0, 375.0, 415.0)
Current view frame is (0.0, 136.0, 375.0, 415.0)
Reset cview  frame is (0.0, 0.0, 323.6666666666667, 458.6666666666667)

Если я вызываю self.view.layoutSubviews () сразу после назначения нового кадра, вывод будет:

Relative     frame is (0.0, 136.0, 375.0, 415.0)
Current view frame is (0.0, 0.0, 323.6666666666667, 414.6666666666667)
Reset cview  frame is (0.0, 0.0, 323.6666666666667, 458.6666666666667)

Итак, я предполагаю, что представление размещает подпредставления где-то за кулисами, но я не уверен, почему это изменит кадр currentView.

Буду признателен за любой совет, это сводит меня с ума весь день.

...