我有一个轻击手势动作,可以打开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都相同。在使用区域中的时间/位置下,只有“完成”按钮从其正常位置向上移动。
答案 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