iPhone 6 Plus 横向显示的 UIModalPresentationPopover 不显示弹出窗口

iosiphone

1个回答

写回答

ceyinxarmxsjlb

2025-07-10 00:01

+ 关注

iphone
iphone

iphone 6 Plus 横向显示的 UIModalPresentationPopover 不显示弹出窗口

在开发IOS应用程序时,我们经常会使用UIModalPresentationPopover来显示弹出窗口。然而,有时候在iphone 6 Plus横向显示时,使用UIModalPresentationPopover却无法正常显示弹出窗口的问题。本文将介绍这个问题的原因,并提供解决方案。

问题的原因

iphone 6 Plus具有较大的屏幕尺寸,在横向显示时,宽度更大,高度相对较小。而UIModalPresentationPopover弹出窗口的尺寸通常是根据屏幕的宽度来计算的,因此在横向显示时,弹出窗口的高度会非常小,导致内容无法正常显示。

解决方案

要解决这个问题,我们可以通过自定义弹出视图控制器的尺寸来适配iphone 6 Plus的横向显示。具体步骤如下:

1. 创建一个继承自UIPopoverPresentationControllerDelegate的类,用于自定义弹出视图控制器的尺寸。

Swift

class CustomPopoverPresentationControllerDelegate: NSObject, UIPopoverPresentationControllerDelegate {

// 自定义弹出视图控制器的尺寸

func adaptivePresentationStyle(for controller: UIPresentationController, trAItCollection: UITrAItCollection) -> UIModalPresentationStyle {

return .none

}

// 适配iphone 6 Plus横向显示

func presentationController(_ controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {

let navigationController = UINavigationController(rootViewController: controller.presentedViewController)

return navigationController

}

}

2. 在需要显示弹出窗口的视图控制器中,设置弹出视图控制器的modalPresentationStyle为UIModalPresentationPopover,并设置popoverPresentationController的delegate为自定义的PopoverPresentationControllerDelegate。

Swift

class ViewController: UIViewController {

let customPopoverPresentationControllerDelegate = CustomPopoverPresentationControllerDelegate()

// 显示弹出窗口

func showPopover() {

let popoverContentViewController = PopoverContentViewController()

popoverContentViewController.modalPresentationStyle = .popover

popoverContentViewController.popoverPresentationController?.delegate = customPopoverPresentationControllerDelegate

// 设置弹出窗口的位置

popoverContentViewController.popoverPresentationController?.sourceView = self.view

popoverContentViewController.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)

// 显示弹出窗口

self.present(popoverContentViewController, animated: true, completion: nil)

}

}

3. 在自定义的PopoverContentViewController中,设置preferredContentSize属性来调整弹出窗口的尺寸。

Swift

class PopoverContentViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

// 设置弹出窗口的尺寸

self.preferredContentSize = CGSize(width: 300, height: 200)

}

}

在iphone 6 Plus横向显示时,使用UIModalPresentationPopover显示弹出窗口可能会导致窗口内容无法正常显示。通过自定义弹出视图控制器的尺寸,我们可以解决这个问题。通过设置popoverPresentationController的delegate为自定义的PopoverPresentationControllerDelegate,并在适配方法中返回合适的尺寸,我们可以确保弹出窗口在iphone 6 Plus横向显示时能够正常显示。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号