2017-11-08 15 views
2

SKStoreProductViewControllerを表示し、いくつかの制約の競合が発生しました。以前に有効化された制約が再アクティブ化されていることを確認できます。なぜこのようなことが起こるのか分かりません。SKStoreProductViewControllerを表示すると、非アクティブな制約が再アクティブ化されます。

*** ———><———— ***と表示されています。

唯一の可能性は私が考えることができます:私のアプリはランドスケープ専用なので、SKStoreProductViewController.shouldAutorotateをサブクラス化してfalseを返す必要があります。

class MyProductViewController : SKStoreProductViewController { 
    override var shouldAutorotate: Bool { 
     return false 
    } 
} 

func openStoreProduct(identifier: String) { 
    let storeViewController = MyProductViewController() 
    storeViewController.delegate = self 

    let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier] 
    storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) in 
     if loaded { 
      print("In: \(self?.myConstraint.isActive)") 
      // *** ———> Prints "In: false". <——— *** 

      self?.present(storeViewController, animated: true) { 
     } 
    } 
} 

func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) { 
    print("Out: \(self.myConstraint.isActive)") 
    // *** ———> prints "Out: true" <——— *** 

    viewController.dismiss(animated: true, completion: nil) 
} 
+0

StoreViewControllerに行くと、かなり多くのレイアウトプロパティが混乱することが分かりました。これは、StoreViewControllerがかなりの数のレイアウトプロパティで混乱することが判明しました。これは補償する必要があります(つまりハッキングされている)。上記の場合、IBの制約を解除すると問題が解決しました。あなたの質問への回答が有効になったときに、完全なソリューションの概要を説明します。 –

答えて

1

問題は、StoreProductコントローラを提示して戻ったときに、一部のレイアウト値がIB値に復元され、プログラムで設定された値が失われてしまうという問題です。 isHiddenisActiveなど

この場合、特定の状況では制約を置き換えていましたが、変更が必要ない場合は元のIBをアクティブなままにしました。店舗から戻ったとき、元の制約は-活性化されましたが、それらの置換はでも有効でした。もちろん彼らは葛藤した。

解決策は、IBの制約の "インストール済み"チェックボックスのチェックを外し、のコードの制約を置き換える(そして有効にする)ことです。希望のケース。あなたがそれを変更したくないときにそれをそのまま残すよりもむしろ。

混乱する可能性がある他のUIの場合は、productViewControllerDidFinish()にフラグを設定し、レイアウトコードでそれをテストできます。

この動作は、質問に記載されているランドスケープの問題に関連している可能性があります。 iPhoneの場合、StoreProductViewControllerは、のみをポートレートモードでと表示します。アプリがランドスケープになり、現在のViewControllerがStoreProductを表示すると、OSは明らかにStoreをプレゼンテーションする前にアプリをポートレートで強制的に回転させます()。これは簡単に起こることがわかります。

+0

あなたは私より先です。一方、Apple自身のビューコントローラには、それほど多くの制約の競合がありますが、それ以上注意を払う必要はほとんどありません。 – matt

関連する問題