如何删除 iPad 的 Popover 箭头及其边框

Posted

技术标签:

【中文标题】如何删除 iPad 的 Popover 箭头及其边框【英文标题】:How to remove iPad's Popover arrow and its frame border 【发布时间】:2011-01-21 05:45:58 【问题描述】:

基本上这是两个问题:

    如何去掉 iPad 弹出视图的箭头?

    有什么办法可以去掉popover的黑边?

如果不可能,您能否建议一种在 iPad 中在屏幕顶部显示 UIView(弹出框)的方法,没有箭头和边框(可能是浅色透明边框),好吗?非常感谢。

而且我不认为 ModalView 是一个合适的选项,因为它不能调整大小,也不能通过单击外部模式视图来关闭。

【问题讨论】:

谢谢大家。似乎没有直接的方法可以删除这些,必须自定义弹出框。我在想的是实现一个全屏透明的UIView,并在顶部添加另一个较小尺寸的View。这样当它显示时,它的行为就像一个弹出框。 【参考方案1】:

AFIK 没有内置的方法来指定“无箭头”或弹出无边框。

这是一个 hack,但它基本上可以工作。在由弹出控制器管理的视图控制器的上下文中,在 viewWillAppear: 期间,获取弹出窗口并删除第一层,这是呈现箭头和边框的部分:

- (void) viewWillAppear: (BOOL) animated

    [super viewWillAppear: animated];

    UIView* v = self.view.superview;
    NSLog( @"%@", NSStringFromClass( [v class]) ); // this should print UIView

    v = v.superview;
    NSLog( @"%@", NSStringFromClass( [v class]) ); // this should print UIPopoverView

    [[v.layer.sublayers objectAtIndex:0] removeFromSuperlayer];
       

我想您可以尝试添加自己的图层,以您想要的方式呈现背景/边框。

【讨论】:

很棒的技巧,谢谢。几点注意事项:您需要#import <QuartzCore/QuartzCore.h>。另外,记得在任何旋转之前关闭弹出控制器,否则你会得到一个 EXC_BAD_ACCESS。 移除层是一个非常糟糕的主意,你在提交到appStore时可能会被苹果拒绝。在此处查看此解决方案:github.com/werner77/WEPopover【参考方案2】:

如何去掉 iPad 弹出视图的箭头?

当调用 -presentPopoverFromBarButtonItem:permittedArrowDirections: 时,传递 0 作为第二个参数,而不是任何常量。这没有记录在案,但 Apple 在使用此设置时允许 App Store 中的应用程序。

【讨论】:

这样就行了。但是,如果您使用 UIImagePicker 作为内容视图,则弹出窗口会调整大小并且其宽度无法更改。【参考方案3】:

您无法移除弹出框周围的镶边。最好的办法是重新实现弹出框的想法,但使用自定义代码。

【讨论】:

【参考方案4】:

您无法移除箭头或边框。如果您按照 TomSwift 的建议进行了某种黑客攻击,那么在将您的应用提交到 appStore 时,您将面临崩溃苹果拒绝的风险。

您可以按照 Kevin 的建议实现自己的自定义弹出框,如控制器。 你可以在这里找到一个开源项目:https://github.com/werner77/WEPopover。背景和箭头可以从那个中删除或设置为透明。

【讨论】:

以上是关于如何删除 iPad 的 Popover 箭头及其边框的主要内容,如果未能解决你的问题,请参考以下文章

试图模仿 Apple iPad popover 风格

如何在 ipad 中创建 Popover? [关闭]

Popover箭头与viewcontroller背景颜色不同

popover箭头方向无法确定

如何为 iPhone 创建一个可以在 iOS 9 中针对 iPad 多任务进行调整的 Popover?

iPad上有啥样的popover