UIPopoverController 内的移动框架

Posted

技术标签:

【中文标题】UIPopoverController 内的移动框架【英文标题】:Shift frame inside UIPopoverController 【发布时间】:2013-08-21 15:06:49 【问题描述】:

我的通用应用程序在其设置屏幕中使用 NIB。我想为 iPhone 和 iPad 使用相同的 NIB。

因此,在 iPad 上,我在 MainViewController 中使用 UIPopoverController 进行设置,只需显示 iPhone 大小的 NIB,以显示所谓的 SettingsViewController。弹出框大小为 320x460 点。

这会导致一个问题,因为 iPhone 版本以编程方式在状态栏上方绘制了许多东西,而对于 iPad 版本,这不是必需的。 iPad 上的现状:

如您所见,“设置”标题上方有一个很大的空白区域。因此,我想要的是将视图控制器向上移动大约 20 个点,在弹出框内

弹出框在MainViewController中实例化如下:

        settingsPopoverController = [[UIPopoverController alloc] initWithContentViewController:popoverNavigationController];
        settingsPopoverController.popoverContentSize = CGSizeMake(320, 460);
        settingsPopoverController.delegate = self;
        popoverNavigationController.navigationBarHidden = YES;

在SettingsViewController中,我设置frame如下:

- (void)viewDidLoad

    self.contentSizeForViewInPopover = CGSizeMake(320, 460);

稍后在 SettingsViewController 中,我尝试按如下方式创建偏移量:

- (void)viewWillLayoutSubviews

    // shift it up
    CGRect frame = self.view.frame;
    frame.origin.y = -20;
    [self.view setFrame:frame];

这不会使内容稍微上移。怎么办?

澄清一下:我想向下移动弹出框显示的“视口”。

【问题讨论】:

【参考方案1】:

尝试:

myPopover.autoresizingMask=UIViewAutoresizingNone;

或者:

myPopover.autoresizingMask=UIViewAutoresizingFlexibleHeight || UIViewAutoresizingFlexibleWidth;

您也可以尝试将代码放入-(void)viewDidLayoutSubviews 方法中。 如果此答案没有帮助,请尝试设置 popoverLayoutMargins (property) 而不是 setFrame: 例如:

popover.popoverLayoutMargins=UIEdgeInsetsMake (
CGFloat 50, //top
CGFloat 50,//left
CGFloat 50,//bottom
CGFloat 50//right
);

【讨论】:

UIPopoverController 没有 autoresizingMask 属性,不确定您的意思。将代码移动到 viewDidLayoutSubview 没有任何效果。 在 IB 中尝试将 sligment 约束的优先级设置为最小值。 您需要移动弹出框视图还是弹出框箭头? 我在回答中又添加了一个解决方案。 我需要移动弹出框的内容,而不是弹出框本身。我添加了一个额外的模型。

以上是关于UIPopoverController 内的移动框架的主要内容,如果未能解决你的问题,请参考以下文章

键盘滑回后,UIPopoverController 未移动到原始位置

当键盘出现时,UIPopoverController 在 iOS 7 上奇怪地移动

UISplitViewController 内的 UIPopOverController

从 UIPopoverController 内的 UITableView 中的一行推送 viewController

iOS:UIPopoverController 内的人物选择器,搜索键盘扭曲弹出框

弹出框控制器的固定子视图,里面有一个表视图