UIPopover 内部不显示视图

Posted

技术标签:

【中文标题】UIPopover 内部不显示视图【英文标题】:UIPopover Not Showing View Inside 【发布时间】:2012-07-25 17:56:23 【问题描述】:

我正在使用一个弹出框,它应该只是在里面显示一个 UIView。但是尽管弹出窗口出现了,但它只包含一个空视图(以某种深蓝色着色)。 UIViewController 使用的是那里的“PreferencesController”。

我打开弹窗的代码如下:

- (IBAction)showPopup:(id)sender 

if (_preferencesController == nil) 
    self.preferencesController = [[PreferencesController alloc]init];
    self.preferencesControllerPopover = [[UIPopoverController alloc] 
                                initWithContentViewController:_preferencesController];

[self.preferencesControllerPopover presentPopoverFromBarButtonItem:sender 
                                permittedArrowDirections:0 animated:YES];

除此之外,我只有“preferencesController”,除了viewDidLoad 和“self.contentSizeForViewInPopover = CGSizeMake(800.0, 800.0);”之外不包含任何特殊方法

这是我得到的:

任何想法为什么它不能正常工作?

【问题讨论】:

当弹出框显示时,弹出框箭头是否正确显示(它出现并且指向正确的 barbuttonitem)? @PedroCattori:当我们像permittedArrowDirections:0 这样写时,弹出框将没有箭头。 在这种情况下,临时设置 permittedArrowDirection 可能对调试有用,因为您将能够看到箭头是否指向 barbuttonitem,因此如果错误来自无效barbuttonitem 参数与否。 (我假设 barbuttonitem 仅用于定位弹出框并绘制其箭头。不是这样吗?) 实际上我首先激活了 allowedArrowDirection,它正确指向了 barbuttonitem。我只是使用 :0 来获得更好的外观。我也先有一个较小的尺寸,但它也不起作用。我只是将大小增加到 800.0,因为我使用 Storyboard 创建了一个 UIIVewController 以在其上创建两个标签。但我还将 UIViewController 与我的 PreferencesController 链接在一起,它是一个 UIViewController。所以这也不是问题......:/ 我刚刚添加了显示的弹出窗口的图片,也许这会给您一些提示问题可能出在哪里。 【参考方案1】:

可能的问题

800.0 宽度太大,Popover 无法处理。


在documentation for UIViewController:

(讨论contentSizeForViewInPopover

此属性包含视图控制器在弹出窗口中显示时所需的大小。默认情况下,宽度设置为 320 点,高度设置为 1100 点。您可以根据需要更改这些值。

弹出框的推荐宽度为 320 磅。如果需要,您可以返回一个宽度值最大为 600 磅,但不建议这样做。


可能的解决方案

尝试通过从 UIViewController 调用 presentModalViewController:animated: 以模态方式呈现您的 UIViewController,您希望模态视图控制器在其上进行动画处理。

【讨论】:

【参考方案2】:

我认为这段代码会导致问题:

[self.preferencesControllerPopover presentPopoverFromBarButtonItem:sender permittedArrowDirections:0 animated:YES];

因为sender是id类型,所以需要强制转换,Like:

UIBarButtonItem *but = (UIBarButtonItem *)sender;
 [self.preferencesControllerPopover presentPopoverFromBarButtonItem:but permittedArrowDirections:0 animated:YES];

希望它能解决问题。

【讨论】:

不幸的是这并没有改变任何东西

以上是关于UIPopover 内部不显示视图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用简单的 UIVIew 赋予 UIPopOver 类型的功能

键盘显示时 uipopover 隐藏

防止一次显示多个 UIPopover

自定义 UIPopover

UIPopover 中的导航栏

当模态视图可见且 iPad 旋转时,UIPopover 的内容会更改为随机方向