iPhone 自动布局关闭的弹出窗口

iPhone Popover with AutoLayout Off

我正在使用关闭了自动布局的旧应用程序,我只是 运行 进入需要在 iPhone 上显示弹出窗口的位置。

我使用的代码是套路:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "popoverSegue" {
            let popoverViewController = segue.destinationViewController as! UIViewController
            popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
            popoverViewController.popoverPresentationController!.delegate = self
        }
    }

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
        return UIModalPresentationStyle.None
    }

启用自动布局的示例结果:

关闭自动布局的示例结果:

有没有一种方法可以使用 Apple 的内置系统在不自动布局的情况下显示弹出窗口?

如果您使用 IOS 8 及更高版本,您可以试试这个 (Objective-C :( ).

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
    UIViewController *popoverViewController = segue.destinationViewController;
    popoverViewController.modalPresentationStyle = UIModalPresentationPopover;
    popoverViewController.popoverPresentationController.delegate = self;
}

我相信最终的答案是,如果关闭自动布局,您将无法在 iPhone 上使用 Apple 内置的弹出窗口系统。

我强烈建议您编写自己的基本 UIView 显示系统来适当地处理 showing/hiding 视图。

提示:内置弹出窗口系统最方便的部分是它禁用背景、指向相关项目并在外部点击时关闭等。

如果你可以在没有指向的情况下生活,那么其他一切都很容易复制,因为你关闭了自动布局。您可以将视图大小锁定为 "iPhone",然后使 UIView 背景颜色清晰且完整,并在其顶部放置一个较小的 "content" 适当大小的视图。透明视图禁止点击其下的项目,如果需要,您可以应用点击手势来处理关闭。