Сбой при добавлении UINavigationController - swift - PullRequest
0 голосов
/ 29 июня 2019

Сбой при добавлении UINavigationController. Я использую эту библиотеку и пример кода:

https://github.com/appssemble/appstore-card-transition

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "type2") as! Type2ViewController

// Get tapped cell location
let cell = collectionView.cellForItem(at: indexPath) as! CardCollectionViewCell
cell.settings.cardContainerInsets = UIEdgeInsets(top: 8.0, left: 16.0, bottom: 8.0, right: 16.0)
cell.settings.isEnabledBottomClose = bottomDismiss

transition = CardTransition(cell: cell, settings: cell.settings)
viewController.settings = cell.settings
viewController.transitioningDelegate = transition
viewController.subtitle = "Bottom dismissible"
viewController.background = UIImage(named: "type2-bg-bottom")

viewController.modalPresentationStyle = .custom   
presentExpansion(viewController, cell: cell, animated: true)

Журналы ошибок Xcode:

Class AppstoreTransition.CardPresentationController overrides the -traitCollection getter, which is not supported. If you're trying to override traits, you must use the appropriate API.
Could not cast value of type 'UINavigationController' (0x1049b1338) to 'AppstoreTransition.CardsViewController' (0x1049b1308).
2019-06-29 15:39:24.077448+0200 TechSpec[10118:1200941] Could not cast value of type 'UINavigationController' (0x1049b1338) to 'AppstoreTransition.CardsViewController' (0x1049b1308).

1 Ответ

0 голосов
/ 29 июня 2019

Первое:

Принудительное развертывание значений (используя!) В целом является плохой практикой, и ее можно (и нужно) избегать в большинстве случаев.Принудительное развертывание гарантирует полный крах вашего приложения, если каким-то образом нечего развернуть (ноль).

Вместо этого вам следует использовать что-то вроде if let или guard let, например

guard let cell = collectionView.cellForItem(at: indexPath) as? CardCollectionViewCell else { debugPrint("uh-oh nil in here ?"; return }

или сесли позволено:

if let cell = collectionView.cellForItem(at: indexPath) as? CardCollectionViewCell {
    // your other code
} else {
    // handling the case when your cell is not of type CardCollectionViewCell
}

Я думаю, что для исправления вашей ошибки:

Вы не установили свой пользовательский класс (внутри вашей раскадровки) в CardCollectionViewCell.Посмотрите пример личного проекта ниже, чтобы найти правильное поле ввода в Xcode.Пример для TableView, но для вашего CollectionView это то же самое.

  • Вы должны выбрать свою пользовательскую ячейку
  • Введите свое имя пользовательского класса
  • Нажмите Ввод.

В противном случае ваша ячейка будет UICollectionViewCell по умолчанию.

screenshot xcode storyboard, setting custom class

Если вы инициализировали ячейку раскадровки с помощьюкод, проверьте, действительно ли вы инициализировали ячейку вашего пользовательского типа, а не UICollectionViewCell.

...