在swift5中:iPad上的弹出窗口尺寸合适,但是在iPhone上,它使用的是全屏模式?

问题描述

我想显示一个带有TextView的弹出窗口,在iPad上可以使用很长时间,但是在iPhone上,弹出窗口会显示“全屏”,这是我不需要也不需要的。 我如何告诉iPhone(如iPad)只能有300 x 300的面积? 我发现了几个可以在iPad上正常运行的示例,但是它们都无济于事。 我究竟做错了什么? (在实际设备上:iPhoneX,iPad2)

NewPopupVCTextView类:UIViewController, UITextFieldDelegate {

@IBOutlet weak var infoTextTextView: UITextView!

override var preferredContentSize: CGSize {
    get {
          if infoTextTextView != nil,let presentingVC = presentingViewController {
            setTextViewContent()
            return infoTextTextView.contentSize
          }
          return super.preferredContentSize
    }
    set { super.preferredContentSize = newValue }
}

func setTextViewContent() {
    infoTextTextView.text = sourceText
}

}

解决方法

在您的源ViewController中

//
//  ViewController.swift
//  popOver
//
//  Created by Lieng Hongky on 8/26/20.
//  Copyright © 2020 Hongky. All rights reserved.
//

import UIKit

class ViewController: UIViewController,UIPopoverPresentationControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    @IBAction func openPopover(_ sender: Any) {
        //MARK:====> instantiate the ViewController you want to be pop up
        let popVC = UIStoryboard(name: "Main",bundle: .main).instantiateViewController(identifier: "popVC")
        popVC.modalPresentationStyle = .popover
        
        //MARK:====> set the source view for the pop up VC
        popVC.popoverPresentationController?.sourceView = self.view
        popVC.popoverPresentationController?.sourceRect = CGRect(origin: self.view.center,size: CGSize.zero)
        
        //MARK:====>if you want to omit the arrow add this line of code
        popVC.popoverPresentationController?.permittedArrowDirections = .init(rawValue: 0)
        popVC.popoverPresentationController?.delegate = self
        
        self.present(popVC,animated: true) {
            
        }
    }
    
    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
        return .none
    }

}