現在、広告プロバイダーをアプリに統合する作業を行っています。広告が表示されても完全に失敗した場合は、広告の前にフェードメッセージを配置したいと思います。
サブビューを現在のビューに追加し、それを使用して前面に表示しようとする関数を作成しました
[self.view bringSubviewToFront:mySubview]
この関数は、広告が読み込まれたという通知で起動します(通知は、プロバイダーのSDKからのものです)。ただし、サブビューが広告の前に表示されません。これは広告プロバイダーによって意図的に困難にされていると思いますが、私は関係なくそれをしたいと思います。現在、これを許可できるかどうかについてプロバイダーと話し合っています。しかし、当分の間、私はそれが可能かどうかを見たいだけです。
とにかく私のもののサブビューを最上部のビューに強制して、何にも遮られないようにすることができますか?
広告プロバイダーのビューがself.view
ではなく[UIApplication sharedApplication].keyWindow
などに追加された場合はどうなりますか?
次のようなものを試してください:
[[UIApplication sharedApplication].keyWindow addSubview:yourSubview]
または
[[UIApplication sharedApplication].keyWindow bringSubviewToFront:yourSubview]
これを試して:
self.view.layer.zPosition = 1;
Jereの答えのSwift 2バージョン:
UIApplication.sharedApplication().keyWindow!.bringSubviewToFront(YourViewHere)
スウィフト3:
UIApplication.shared.keyWindow!.bringSubview(toFront: YourViewHere)
スウィフト4:
UIApplication.shared.keyWindow!.bringSubviewToFront(YourViewHere)
誰かが10秒節約できることを願っています! ;)
一度これが必要になりました。カスタム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
ビューでこのクラスを拡張してください。もちろん、これは、サブビューがその兄弟ビューよりも上であることを保証するだけです。
私が経験した限り、zpositionは最良の方法です。
self.view.layer.zPosition = 1;
C#では、View.BringSubviewToFront(childView); YourView.Layer.ZPosition = 1;両方とも機能するはずです。
xamarin ios:this.InsertSubview(subview_youwant_beback、0);
InSwift 4.2
UIApplication.shared.keyWindow!.bringSubviewToFront(yourView)
ソース: https://developer.Apple.com/documentation/uikit/uiview/1622541-bringsubviewtofront#declarations