使子视图在所有其他视图之前

我目前正在将广告提供商整合到我的应用中。 我希望在广告显示的时候在广告前放置一个淡出的信息,但是完全不成功。

我做了一个function,添加一个子视图到我目前的视图,并试图把它带到前面使用

[self.view bringSubviewToFront:mySubview] 

该函数触发通知加载的广告(通知来自adprovider的SDK)。 但是,我的子视图不会在广告前面结束。 我想这是由广告提供商特意制作的,但我希望不pipe。 我目前正在与提供者讨论这是否可以被允许。 但就目前而言,我只想看看是否有可能。

无论如何,我可以强迫我的一个子视图成为最不被任何东西阻挡的最顶层视图吗?

如果广告提供商的视图没有添加到self.view而是添加到[UIApplication sharedApplication].keyWindow

尝试像这样:

 [[UIApplication sharedApplication].keyWindow addSubview:yourSubview] 

要么

 [[UIApplication sharedApplication].keyWindow bringSubviewToFront:yourSubview] 

尝试这个:

 self.view.layer.zPosition = 1; 

我曾经需要这个。 我创build了一个自定义的UIView类 – AlwaysOnTopView

 @interface AlwaysOnTopView : UIView @end @implementation AlwaysOnTopView - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (object == self.superview && [keyPath isEqual:@"subviews.@count"]) { [self.superview bringSubviewToFront:self]; } [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } - (void)willMoveToSuperview:(UIView *)newSuperview { if (self.superview) { [self.superview removeObserver:self forKeyPath:@"subviews.@count"]; } [super willMoveToSuperview:newSuperview]; } - (void)didMoveToSuperview { [super didMoveToSuperview]; if (self.superview) { [self.superview addObserver:self forKeyPath:@"subviews.@count" options:0 context:nil]; } } @end 

让你的观点扩展这个类。 当然,这只能确保子视图高于所有的兄弟视图。

杰瑞的Swift 2版的回答:

 UIApplication.sharedApplication().keyWindow!.bringSubviewToFront(YourViewHere) 

Swift 3:

 UIApplication.shared.keyWindow!.bringSubview(toFront: YourViewHere) 

希望能省10秒! ;)

据我所知,zposition是最好的方法。

self.view.layer.zPosition = 1;