Io8 Как установить размер UIPopoverPresentationController

Я установил UIPopoverPresentationController, чтобы показать UIViewController, и это похоже на показ UIAlertView.

Но когда я создал настраиваемый UIViewController и использовал UIPopoverPresentationController. Появился экран в полноэкранном режиме.

Я хочу создать эффект как http://cocoa.tumblr.com/post/92070238973/how-can-i-use-both-uipopoverpresentationcontroller

Я попытался установить preferredContentSize, но он по-прежнему отображается в полноэкранном режиме.

мой код ниже:

 - (void)viewDidLoad {
     [super viewDidLoad];
     contentVC = [UIViewController new];
     contentVC.view.backgroundColor = [UIColor darkGrayColor];
     contentVC.preferredContentSize = CGSizeMake(200, 200);


     UIPopoverPresentationController *popPC =      contentVC.popoverPresentationController;
     popPC.delegate = self;
     popPC.sourceView = self.view;
     popPC.sourceRect = CGRectMake(0,0,0,0);
     popPC.permittedArrowDirections = UIPopoverArrowDirectionAny;
 }

 - (IBAction)btnAction:(id)sender {

 [self presentViewController:contentVC animated:NO completion:ni

 }

 -(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
 {
     return UIModalPresentationOverCurrentContext;
 }

Кто-нибудь знает, как установить размер в uiviewcontroller и UIPopoverPresentationController, как эффект веб-сайта?

Я установлю другой компонент в UIViewController (теперь просто установите backgroundcolor).

Большое спасибо.

Ответ 1

Swift 3

Я сделал цифровую панель, которую я хотел использовать таким образом, поэтому на viewpadController с числовой панелью вам нужно установить эти значения

override func viewDidLoad()
{
    super.viewDidLoad()
    self.preferredContentSize = CGSize(width:340, height:385) // IMPORTANT

    // REST ARE COSMETIC CHANGES
    self.view.backgroundColor = UIColor.clear
    self.view.isOpaque = true        
    self.view.layer.masksToBounds = false
    self.view.layer.shadowOffset = CGSize(width: 0, height: 5)
    self.view.layer.shadowColor = UIColor(red:0, green:0, blue:0, alpha:1).cgColor
    self.view.layer.shadowOpacity = 0.5
    self.view.layer.shadowRadius = 20
}

и на viewController я показываю его:

func showNumpad(view: UIView)
    {
        let controller: UIViewController? = numberpadVC()
        // present the controller
        // on iPad, this will be a Popover
        // on iPhone, this will be an action sheet
        controller?.modalPresentationStyle = .popover
        self.present(controller!, animated: true, completion: { _ in })
        // configure the Popover presentation controller
        let popController: UIPopoverPresentationController? = controller?.popoverPresentationController
        popController?.permittedArrowDirections = .any
        //popController?.barButtonItem = textField.inputView
        popController?.sourceView = view
        popController?.delegate = self
        popController?.sourceRect = (controller?.view.frame)! //CGRect(x: 0, y:0, width:340, height:384)
    }

отображение цифровой клавиатуры:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool
{
    //self.scrollview.addSubview(self.numpad)
    UIView.animate(withDuration: 0.25)
    {
        //self.numpad.frame.origin.x = self.viewNum1.frame.origin.x - 330
        if textField == self.txtNum1
        {
            self.showNumpad(view: textField)
        }
    }
}

и выглядит следующим образом: введите описание изображения здесь

Ответ 2

В раскадровке выберите контроллер навигации и задайте значения размера содержимого.

введите описание изображения здесь

Это также можно сделать в коде путем подкласса UINavigationController и установки preferredContentSize.

- (void)viewDidLoad {
   [super viewDidLoad];
   self.preferredContentSize = CGSizeMake(100, 100);
}

Ответ 3

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller{
    return UIModalPresentationNone;
}

Установите это под своим кодом.