Ios popoverPresentationController(u:willRespositionPopOverto:in:)正在尝试更改不同方向上弹出窗口的大小

Ios popoverPresentationController(u:willRespositionPopOverto:in:)正在尝试更改不同方向上弹出窗口的大小,ios,swift,uipopovercontroller,Ios,Swift,Uipopovercontroller,我有一个弹出窗口,当方向改变时,我试图改变宽度。当弹出窗口以当前方向显示时,我得到了所需的宽度,但当我从.trait->.scape切换时,我没有得到所需的宽度。例如,它只保留了一次.trait 我阅读了关于popoverPresentationController的文档(u3;:willPopOverto:in:) 但我不知道它是怎么工作的。 事实上,当我改变方向时,它甚至没有调用。我使用的UIPopoverPresentationControllerDelegate的其余部分工作正常 这是更

我有一个弹出窗口,当方向改变时,我试图改变宽度。当弹出窗口以当前方向显示时,我得到了所需的宽度,但当我从.trait->.scape切换时,我没有得到所需的宽度。例如,它只保留了一次.trait

我阅读了关于popoverPresentationController的文档(u3;:willPopOverto:in:)

但我不知道它是怎么工作的。 事实上,当我改变方向时,它甚至没有调用。我使用的UIPopoverPresentationControllerDelegate的其余部分工作正常

这是更改弹出窗口大小的正确方法,还是我应该使用其他方法

有什么帮助吗?非常感谢

func popoverPresentationController(_ popoverPresentationController: UIPopoverPresentationController, willRepositionPopoverTo rect: UnsafeMutablePointer<CGRect>, in view: AutoreleasingUnsafeMutablePointer<UIView>) {

        if popoverPresentationController.presentingViewController is PopUpTextPickerViewController{
            let viewFrame = popoverPresentationController.presentingViewController.view.frame

            let newRect = CGRect(x: viewFrame.origin.x, y: viewFrame.origin.y, width: self.view.bounds.width, height: 100)
            let newView = UIView(frame: newRect)
            rect.pointee =  newRect
            view.pointee = newView

        }
        print("popoverPresentation:willRepositionPopOverTo")
    }

    //Shows the PopUpTextPickerViewController on the screen
    @IBAction func fontButtonPressed(_ sender: UIBarButtonItem) {

        subscribeToNotifications(notification: .popUpTextPickerViewController)
        let fontController = storyboard?.instantiateViewController(withIdentifier: "popUpTextPickerViewController") as! PopUpTextPickerViewController
        fontController.fontName = self.fontName
        fontController.fontSize = self.fontSize
        fontController.modalPresentationStyle = UIModalPresentationStyle.popover
        fontController.popoverPresentationController?.delegate = self
        fontController.popoverPresentationController?.barButtonItem = fontButton
        fontController.popoverPresentationController?.backgroundColor = .clear
        fontController.popoverPresentationController?.sourceView = self.view
        fontController.preferredContentSize = CGSize(width: self.view.bounds.width, height: 100)
        present(fontController, animated: true, completion: nil)
    }
func popoverPresentationController(popoverPresentationController:UIPopoverPresentationController,将PopOverTo rect:UnsafemeutablePointer重新定位到视图中:AutoreleasingUnsafemeutablePointer){
如果popoverPresentationController.presentingViewController是PopupExtPickerServiceController{
让viewFrame=popoverPresentationController.presentingViewController.view.frame
设newRect=CGRect(x:viewFrame.origin.x,y:viewFrame.origin.y,宽度:self.view.bounds.width,高度:100)
让newView=UIView(帧:newRect)
rect.pointee=newRect
view.pointee=newView
}
打印(“popoverPresentation:WillPopOverto”)
}
//在屏幕上显示PopUpTextPickerViewController
@iAction func fontButtonPressed(u发件人:UIBarButtonItem){
subscribeToNotifications(通知:.popUpTextPickerViewController)
让fontController=storyboard?.InstanceEviewController(标识符为:“popUpTextPickerViewController”)作为!popUpTextPickerViewController
fontController.fontName=self.fontName
fontController.fontSize=self.fontSize
fontController.modalPresentationStyle=UIModalPresentationStyle.popover
fontController.popoverPresentationController?.delegate=self
fontController.popoverPresentationController?.barButtonItem=fontButton
fontController.popoverPresentationController?.backgroundColor=.clear
fontController.popoverPresentationController?.sourceView=self.view
fontController.preferredContentSize=CGSize(宽度:self.view.bounds.width,高度:100)
当前(fontController,动画:真,完成:无)
}

尝试在父视图控制器中实现以下代码。UIKit在更改显示的视图控制器视图的大小之前调用此方法-

override func viewWillTransition(to size: CGSize,
                        with coordinator: UIViewControllerTransitionCoordinator) {

    super.viewWillTransition(to: size, with: coordinator)

    if let myVC = self.presentedViewController as? MyViewController {
            myVC.preferredContentSize = CGSize(width: {yorWidth}, height: {yourHeight})
    }
}

尝试在父视图控制器中实现以下代码。UIKit在更改显示的视图控制器视图的大小之前调用此方法-

override func viewWillTransition(to size: CGSize,
                        with coordinator: UIViewControllerTransitionCoordinator) {

    super.viewWillTransition(to: size, with: coordinator)

    if let myVC = self.presentedViewController as? MyViewController {
            myVC.preferredContentSize = CGSize(width: {yorWidth}, height: {yourHeight})
    }
}

你明白了吗?你明白了吗?