gpt4 book ai didi

ios - 呈现 SKStoreProductViewController 重新激活非事件约束

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:31:00 27 4
gpt4 key购买 nike

我正在展示一个 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)
}

最佳答案

问题在于,当从展示 StoreProduct Controller 返回时,一些布局值已恢复为它们的 IB 值,丢失了以编程方式设置的值,例如isHidden, isActive

在这种情况下,我在某些情况下替换了约束,但在不需要更改时让原始 IB 处于事件状态。从商店返回后,原始约束被重新激活,但它们的替换仍然处于事件状态。当然他们有冲突。

解决方案是在 IB 中取消选中约束的“已安装”复选框,并为每个所需的情况替换(并激活)代码中的约束。而不是在您不想更改它时保持原样。

对于其他可能困惑的 UI 事物,您可以在 productViewControllerDidFinish() 中设置一个标志并在您的布局代码中对其进行测试。

这种行为可能与问题中提到的景观问题有关。在 iPhone 上,StoreProductViewController 以纵向模式显示。当应用程序处于横向状态时,当前的 ViewController 显示 StoreProduct 时,操作系统显然强制旋转应用程序为纵向,然后再显示商店。您可以看到这种情况短暂发生。 (这在 iPad 上不是问题,因为商店在任一方向都显示为弹出窗口。)

关于ios - 呈现 SKStoreProductViewController 重新激活非事件约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47169398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com