Я пытаюсь создать приложение, которое имитирует поведение карт в 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.
Буду признателен за любой совет, это сводит меня с ума весь день.