首页 > 解决方案 > 在 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
}

}

标签: iosiphoneipadswift5

解决方案


在您的源视图控制器中

//
//  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
    }

}


推荐阅读