我正在努力将广告提供商集成到我的应用中。我希望在广告显示但广告不完整时在广告前放置一条淡化消息。
我创建了一个功能,在我当前视图中添加子视图,并尝试使用
将其显示在前面[self.view bringSubviewToFront:mySubview]
该功能会在加载广告的通知时触发(通知来自adprovider的SDK)。但是,我的子视图不会在广告前面结束。我认为这是广告提供商故意制作的,但我希望无论如何都这样做。我目前正在与提供商讨论是否允许这样做。但就目前而言,我只是想看看它是否可能。
反正我是否可以强迫我的子视图成为最顶级的视图,以免被任何东西阻挡?
答案 0 :(得分:157)
试试这个:
self.view.layer.zPosition = 1;
答案 1 :(得分:85)
如果广告提供商的视图未添加到self.view
,但会添加到[UIApplication sharedApplication].keyWindow
之类的内容,该怎么办?
尝试类似:
[[UIApplication sharedApplication].keyWindow addSubview:yourSubview]
或
[[UIApplication sharedApplication].keyWindow bringSubviewToFront:yourSubview]
答案 2 :(得分:21)
Swre 2版Jere的回答:
UIApplication.sharedApplication().keyWindow!.bringSubviewToFront(YourViewHere)
斯威夫特3:
UIApplication.shared.keyWindow!.bringSubview(toFront: YourViewHere)
斯威夫特4:
UIApplication.shared.keyWindow!.bringSubviewToFront(YourViewHere)
希望它可以节省10秒! ;)
答案 3 :(得分:18)
我曾经需要这个。我创建了一个自定义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
让您的观点扩展此课程。当然,这只能确保子视图高于其所有兄弟视图。
答案 4 :(得分:6)
据我所知,zposition是一种最好的方式。
self.view.layer.zPosition = 1;
答案 5 :(得分:0)
在 Swift 4.2
中Target
来源:https://developer.apple.com/documentation/uikit/uiview/1622541-bringsubviewtofront#declarations
答案 6 :(得分:0)
xamarin ios: this.InsertSubview(subview_youwant_beback,0);
答案 7 :(得分:0)
在c#中,View.BringSubviewToFront(childView); YourView.Layer.ZPosition = 1; 两者都应该起作用。
答案 8 :(得分:0)
让我总结一下。 在Swift 5中
如果在最后一个视图中添加视图,则可以选择将添加子视图添加到keyWindow中。 否则,您可以带SubViewToFront。
let view = UIView()
UIApplication.shared.keyWindow?.addSubview(view)
UIApplication.shared.keyWindow?.bringSubviewToFront(view)
您还可以设置zPosition。但是缺点是您无法更改手势响应顺序。
view.layer.zPosition = 1