如何删除 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 箭头及其边框的主要内容,如果未能解决你的问题,请参考以下文章
Popover箭头与viewcontroller背景颜色不同