【问题标题】:Where to set the size of a view controller presented in a popover?在哪里设置弹出窗口中显示的视图控制器的大小?
【发布时间】:2012-10-12 18:06:03
【问题描述】:

基于 Apple 的 sample code,我的应用程序在弹出窗口中显示了一个视图控制器,它由一个条形按钮触发:

- (IBAction)configChartTapped:(id)sender {

GrowthChartConfigOneViewController *panelViewController = [[GrowthChartConfigOneViewController alloc]init];

UIPopoverController *popover = [[UIPopoverController alloc]initWithContentViewController:panelViewController];
popover.delegate = self;

// Store the popover in a custom property for later use.
self.popover = popover;

[self.popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
}

但是,我没有找到设置弹出框大小的方法。

问题:我应该在哪里以及如何设置弹出框及其视图控制器的大小?我可以直接在 XCode 中设置大小以使视图在情节提要中正确调整大小吗?

【问题讨论】:

    标签: objective-c ios uiviewcontroller ios6 uipopovercontroller


    【解决方案1】:

    您也可以在弹出框类本身中设置它。这样,如果您允许从多个位置调用弹出框,您只需设置一次大小。

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
            self.view.backgroundColor = [UIColor redColor];
            self.contentSizeForViewInPopover = CGSizeMake(320.0, 216.0);
        }
        return self;
    }
    

    【讨论】:

    • Alex,您可能必须将其移至 viewDidLoad。
    • 在 iOS7 Xcode 中说 contentSizeForViewInPopover 已被弃用,而是使用“preferredContentSize”,如下所示:self.preferredContentSize = CGSizeMake(630, 340);
    【解决方案2】:

    只需给出 popovercontentsize 并确保该视图应符合如下定义的弹出框大小:

        popover = [[UIPopoverController alloc] initWithContentViewController: panelViewController];
        popover.popoverContentSize = CGSizeMake(550, 700);
    

    【讨论】:

    • 我可以直接在 Xcode 中设置弹出框大小吗?当我在代码中设置大小时,弹出视图具有标准视图大小,并且在情节提要中的大小不正确。
    【解决方案3】:

    上面的答案很好,但由于我的需求略有不同,我只是想为情节提要更新它。如果您使用这样的情节提要标识符进行实例化:

    CBItemViewController *addNewPayee = [self.storyboard instantiateViewControllerWithIdentifier:@"cbItemPopover"];
    

    然后您可以在弹出框的代码中设置自定义大小,如下所示:

    - (id)initWithCoder:(NSCoder *)decoder {
        if(self = [super initWithCoder:decoder]) {
            self.preferredContentSize = CGSizeMake(630, 340);
        }
        return self;
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-24
      • 2017-10-13
      • 1970-01-01
      • 2021-05-18
      • 2013-01-06
      • 2013-04-28
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多