如何设置UIPopoverPresentationController大小?

13

我设定了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中设置其他组件(现在只设置背景颜色)。

非常感谢。


也许这可以帮助你:https://dev59.com/nl8e5IYBdhLWcg3w0dNJ#25656733 - Lyndsey Scott
我看了那篇帖子,但它并没有对我有所帮助。我尝试将Objective-C代码转换为上面的代码,但弹出窗口的大小并没有改变。 - dickfala
我所指的并不是答案中的代码部分,而是adaptivePresentationStyleForPresentationController:的使用--https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAdaptivePresentationControllerDelegate_protocol/index.html#//apple_ref/occ/intfm/UIAdaptivePresentationControllerDelegate/adaptivePresentationStyleForPresentationController: - Lyndsey Scott
我尝试更改adaptivePresentationStyleForPresentationController的返回值,我尝试了所有的返回常量,但仍然没有改变:( - dickfala
3个回答

12

在Storyboard中选择导航控制器 (Navigation Controller) 并设置Content Size的值。

enter image description here

这也可以通过子类化UINavigationController并设置preferredContentSize来完成。

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

5

Swift 3

我制作了一个数字键盘,想以这种方式使用,在数字键盘的viewController中,需要设置以下值:

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
}

在视图控制器中,我正在显示它:

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

现在看起来是这样的:在这里输入图片描述


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

把这个放在你的代码下面。


这在iPhone上是必需的!但在iPad上不需要。 - fatfatson
请问您能否解释一下如何通过这样做来设置UIPopoverPresentationController的大小。 - turingtested

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接