You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iPad模拟器中UIPrinterPickerController无法弹出问题求助

解决iPad模拟器中UIPrinterPickerController无法弹出的问题

我之前也踩过这个坑!在iPad上使用UIPrinterPickerController和iPhone的展示逻辑完全不一样——直接调用present方法行不通,因为iPad的UI规范要求这类选择器必须以**popover(弹出框)**的形式呈现,你当前的代码没有配置iPad的popover锚点,所以控制器才弹不出来。而iPhone是全屏设备,present默认会以全屏模态方式展示,所以能正常工作。

修改后的代码示例

你需要为iPad的UIPrinterPickerController指定popover的弹出锚点(比如关联一个触发按钮,或者视图中的某个区域),这样系统才知道从哪里弹出选择器:

let pickerController = UIPrinterPickerController(initiallySelectedPrinter: nil)

if UIDevice.current.userInterfaceIdiom == .pad {
    // 配置popover的弹出锚点:如果是按钮触发,用下面这行
    // pickerController.popoverPresentationController?.barButtonItem = yourTriggerButton
    // 如果是在视图中触发,指定sourceView和sourceRect(这里以视图中心为例)
    pickerController.popoverPresentationController?.sourceView = self.view
    pickerController.popoverPresentationController?.sourceRect = CGRect(
        x: self.view.bounds.midX, 
        y: self.view.bounds.midY, 
        width: 0, 
        height: 0
    )
    pickerController.popoverPresentationController?.permittedArrowDirections = [] // 关闭箭头显示
    
    pickerController.present(animated: true) { (controller, completed, error) in
        if completed, let selectedPrinter = controller.selectedPrinter {
            let ipadprintername = selectedPrinter.displayName
            print("iPad选中打印机:\(ipadprintername)")
        }
    }
} else {
    pickerController.present(animated: true) { (controller, completed, error) in
        if completed, let selectedPrinter = controller.selectedPrinter {
            let iphoneprintername = selectedPrinter.displayName
            print("iPhone选中打印机:\(iphoneprintername)")
        }
    }
}

关键注意点

  • iPad上展示popover类控制器时,必须为popoverPresentationController设置sourceView+sourceRect或者barButtonItem,这是系统的强制要求,否则会直接忽略present请求。
  • 我优化了代码中的可选值处理,替换了强制解包selectedPrinter的写法,避免出现崩溃风险。

内容的提问来源于stack exchange,提问作者Nupendra Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:37:36