【问题标题】:UIBarButtonItem gives me wrong frame for popoverPresentationControllerUIBarButtonItem 给了我错误的 popoverPresentationController 框架
【发布时间】:2016-08-02 17:11:48
【问题描述】:

我有一个带有 UIBarButtomItem 的工具栏,其左上角带有标签 Admin

我需要在点击它时显示一个弹出框,但它出现在错误的位置,它出现在屏幕的左上角:

这是打开弹窗的功能:

// this IBAction is assigned only to the Admin bar button item
@IBAction func openAdmin(sender: UIBarButtonItem) {
    let alertController = UIAlertController(title: nil, message: "Elige una opción", preferredStyle: .ActionSheet)

    // action button initializations... ... ...

    let barButtonItemSize = sender.valueForKey("view")

    alertController.popoverPresentationController?.sourceView = self.view
    alertController.popoverPresentationController?.sourceRect = barButtonItemSize!.frame

    presentViewController(alertController, animated: true, completion: nil)
}

当我触摸管理栏按钮时,我也会在控制台上收到此警告:

对尚未渲染的视图进行快照会导致快照为空。确保在快照或屏幕更新后的快照之前至少渲染一次视图

我做错了什么?或者我需要做什么才能在管理员顶部显示弹出框?

【问题讨论】:

    标签: ios swift uibarbuttonitem uipopover


    【解决方案1】:

    替换

    alertController.popoverPresentationController?.sourceView = self.view
    alertController.popoverPresentationController?.sourceRect = barButtonItemSize!.frame
    

    alertController.popoverPresentationController?.sourceView = sender
    alertController.popoverPresentationController?.barButtonItem = sender
    

    【讨论】:

    • 感谢您的回答。我无法将发件人分配给 sourceView,因为发件人不是 UIView 类型。
    • 然后尝试设置alertController.popoverPresentationController?.barButtonItem = sender参考this SO post
    • 有效!!谢谢你!!但是我仍然在控制台上收到警告:对尚未渲染的视图进行快照会导致快照为空。确保您的视图在快照或屏幕更新后至少渲染一次。
    • 不客气..!!此警告通常发生在视图出现动画而前一个视图的动画未完成时。只需在 google 中搜索此警告,您将获得许多针对不同情况的解决方案。这不是什么严重的问题!
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多