     
     func loadSnapshotsIfNeeded(animated animated:Bool) {
         guard snapshots == nil else { return }
+        if source?.view.window == nil {
+            source?.view.frame = view.frame
+            source?.view.layoutIfNeeded()
+        }
         snapshots = [source?.view.snapshotViewAfterScreenUpdates(true)] + selectableViewControllers.map(render)
         
         for indexPath in collectionView.indexPathsForVisibleItems() {

        
        let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) as! OpenDraftSelectorViewController
        let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)!
        
        let initialFrameRelativeToSuperview = transitionContext.initialFrameForViewController(fromViewController)
        let initialFrame = fromViewController.view.superview?.convertRect(initialFrameRelativeToSuperview, toView: fromView.superview) ?? initialFrameRelativeToSuperview
        
        transitionContext.containerView()?.addSubview(fromView)
        fromView.frame = initialFrame
        fromView.layoutIfNeeded()
        
        fromViewController.reloadSourceSnapshot()
        
        
        fromViewController.animateSwitchToLayout(fromViewController.initialLayout, almostParallelAnimation: {
            fromViewController.forEachVisibleCell({


extension UIViewController {
    
    @nonobjc var hasRestorationSource:Bool {
        return restorationClass != nil || storyboard != nil
    }
    
    @nonobjc var isRestorationEligible:Bool {
        return hasRestorationSource && restorationIdentifier != nil
    }
    
    @nonobjc func setRestorationIdentifier(restorationIdentifier:String, contingentOnViewController previousViewController:UIViewController) {
        if previousViewController.isRestorationEligible && hasRestorationSource {
            self.restorationIdentifier = restorationIdentifier
        } else {
