呈现App Store产品视图控制器变得不可逆转

时间:2019-05-08 23:55:36

标签: ios swift app-store uinavigationbar

我有一个轻击手势动作,可以打开Apple App Store产品显示屏:

    let storeProductViewController = SKStoreProductViewController()

    @objc func adTap(sender: UITapGestureRecognizer? = nil) -> Void {
        if  adAppID.isEmpty {return}
        let paramDict = [SKStoreProductParameterITunesItemIdentifier: adAppID]
        storeProductViewController.loadProduct(withParameters: paramDict, completionBlock: { (status: Bool, error: Error?) -> Void in
            if status {
//                self.storeProductViewController.edgesForExtendedLayout = []
//              self.storeProductViewController.additionalSafeAreaInsets = UIEdgeInsets(top: 40, left: 0, bottom: 0, right: 0)
//                self.storeProductViewController.modalPresentationCapturesStatusBarAppearance = false
                self.present(self.storeProductViewController, animated: true, completion: nil)
            }
            else {
                if let error = error {
                    print("Error: \(error.localizedDescription)")
                }
            }})
    }

    func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
        viewController.presentingViewController?.dismiss(animated: true, completion: nil)
    }

第一次使用时,一切正常。轻触系统提供的标准“完成”按钮,将弹出模式的“商店”视图,并使用户返回到应用程序中的原始视图。

如果用户再次点击手势动作视图,则将显示“商店产品”视图,但是“完成”按钮向上移动,并且现在位于“安全”区域上方的时间显示下方。它被时间部分遮盖,并且对水龙头不敏感。死锁-无法返回我的应用。

我没有明确创建SKStore使用的Nav控制器,并且我认为我无法控制它。

我尝试了在代码中注释掉的三种方法,以将显示的Store视图及其附件完成按钮按下。这三个都不起作用。

我在这里做错什么,或者如何解决?

附录:更多失败的方法:实例化商店视图后,我尝试直接设置其视图和图层框架,并且还插入了父视图的安全区域和边距-对“完成”按钮均无效。

进一步深入Rabbit洞:比较对StoreProductView Present的第一次调用和第二次调用的屏幕截图(请注意,两种不同的产品,但这没关系,我都尝试了!),我们可以看到与两个视图的store App Icon和Name都相同。在使用区域中的时间/位置下,只有“完成”按钮从其正常位置向上移动。

尝试1 Trial 1

尝试2 Trial 2

1 个答案:

答案 0 :(得分:0)

进一步的调查显示,StoreProductViewController的view.frame.origin.y正在更改(由于未知原因,我没有故意更改):

<div style="width: 50%; float: left;">
    <form id="form" name="form" method="post" action="mantenimiento.php">
        <label for="llbnif" class="label">NIF:</label>
        <input type="text" name="txtnif" id="txtnif"><br>

        <label for="lblNombre" class="label">Nombre:</label>
        <input type="text" name="txtNombre" id="txtNombre"><br>

        <label for="lblApellido" class="label">Apellido:</label>
        <input type="text" name="txtApellido" id="txtApellido"><br>

        <input type="submit" name="btnAgregar" id="btnAgregar" value="Agregar" class="funcionalidades" />
        <input type="submit" name="btnEliminar" id="btnEliminar" value="Eliminar" class="funcionalidades" />
        <input type="submit" name="btnActualizar" id="btnActualizar" value="Actualizar" class="funcionalidades" />
    </form>
    <br>

    <a href="index.html">
        <input type="submit" name="btnVolver" id="btnVolver" value="Volver" class="funcionalidades" /></a>
</div>

所以,我只是通过将这行放在presentVC之前强制其恢复为原始值

Native rects, first run (No forced changes)
Self.View.frame: (0.0, 0.0, 414.0, 896.0)
Self.View.bounds: (0.0, 0.0, 414.0, 896.0)
Store.View.frame: (0.0, 0.0, 0.0, 0.0)
Store.View.bounds: (0.0, 0.0, 0.0, 0.0)

Native rects, second run
Self.View.frame: (0.0, 0.0, 414.0, 896.0)
Self.View.bounds: (0.0, 0.0, 414.0, 896.0)
Store.View.frame: (0.0, 896.0, 414.0, 896.0)
Store.View.bounds: (0.0, 0.0, 414.0, 896.0)

然后该按钮停留在其所属位置,调试轨迹为:

self.self.storeProductViewController.frame.origin.y = 0.0