в swift5: всплывающее окно на iPad имеет правильный размер, но на iPhone оно использует весь экран?

#ios #iphone #ipad #swift5

#iOS #iPhone #iPad #swift5

Вопрос:

Я хочу отобразить всплывающее окно с текстовым представлением, на 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
}
  

}

Ответ №1:

В вашем исходном 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
    }

}

  

Комментарии:

1. Большое вам спасибо за ответ — но с вашим предложением я получил тот же результат на iPhone, что и раньше (моя старая версия работает точно так же на iPad) — так что в целом ничего не изменилось, тем не менее, большое спасибо

2. Могу ли я посмотреть вашу реализацию? в любом случае, вот мой пример, который работает нормально. вы можете клонировать проект и попробовать. github.com/lienghongky/ios_popover.git

3. во-первых, еще раз спасибо за ответ. Конечно, но это не маленькая программа, это довольно большое приложение. что я должен показать? Какие функции или вызовы (или классы, …) я должен показывать?

4. Я попробовал вашу ссылку (github.com/lienghongky/ios_popover.git ) — это пустой проект?! это была плохая шутка, не так ли?

5. Нет, это не шутка! оно не пустое