63

現在、広告プロバイダーをアプリに統合する作業を行っています。広告が表示されるときに広告の前にフェード メッセージを配置したいのですが、まったくうまくいきません。

現在のビューにサブビューを追加し、それを前面に表示しようとする関数を作成しました

[self.view bringSubviewToFront:mySubview]

この関数は、広告が読み込まれたという通知で起動します (通知はアドプロバイダーの SDK からのものです)。ただし、サブビューが広告の前に表示されません。これは広告プロバイダーによって意図的に難しくされていると思いますが、それでもやりたいと思っています。現在、これが許可されるかどうかプロバイダーと話し合っています。しかし、とりあえず、それが可能かどうかを確認したいだけです。

とにかく、私のサブビューを強制的に最上位のビューにして、何も妨げられないようにすることはできますか?

4

8 に答える 8

176

これを試して:

self.view.layer.zPosition = 1;
于 2015-04-02T12:09:59.353 に答える
90

広告プロバイダーのビューが追加されずself.view、次のようなものに追加された場合はどうなります[UIApplication sharedApplication].keyWindowか?

次のようなものを試してください:

[[UIApplication sharedApplication].keyWindow addSubview:yourSubview]

また

[[UIApplication sharedApplication].keyWindow bringSubviewToFront:yourSubview]
于 2012-11-01T17:38:59.910 に答える
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

ビューでこのクラスを拡張します。もちろん、これはサブビューがその兄弟ビューのすべての上にあることを保証するだけです。

于 2012-11-01T17:39:11.367 に答える
1

C# では、View.BringSubviewToFront(childView); YourView.Layer.ZPosition = 1; 両方が機能するはずです。

于 2019-05-22T15:51:25.573 に答える