Je travaille actuellement sur l'intégration d'un fournisseur d'annonces dans mon application. Je souhaite placer un message en fondu devant l'annonce lorsque celle-ci est affichée mais qu'elle a complètement échoué.
J'ai créé une fonction qui ajoute une sous-vue à ma vue actuelle et tente de l'amener au premier plan à l'aide de
[self.view bringSubviewToFront:mySubview]
La fonction est déclenchée à la notification du chargement de l'annonce (la notification provient du SDK du fournisseur de services). Cependant, ma sous-vue ne se termine pas devant l'annonce. J'imagine que cela est rendu délibérément difficile par le fournisseur d'annonces, mais je souhaite le faire quand même. Je discute actuellement avec le fournisseur pour savoir si cela peut ou non être autorisé. Mais pour le moment, je veux juste voir si c'est même possible.
Est-ce que je peux de toute façon forcer une de mes vues à être la vue la plus haute de telle sorte qu'elle ne soit pas obstruée par quoi que ce soit?
Que se passe-t-il si la vue du fournisseur d'annonces n'est pas ajoutée à self.view
mais à quelque chose comme [UIApplication sharedApplication].keyWindow
?
Essayez quelque chose comme:
[[UIApplication sharedApplication].keyWindow addSubview:yourSubview]
ou
[[UIApplication sharedApplication].keyWindow bringSubviewToFront:yourSubview]
essaye ça:
self.view.layer.zPosition = 1;
Version rapide 2 de la réponse de Jere:
UIApplication.sharedApplication().keyWindow!.bringSubviewToFront(YourViewHere)
Swift 3:
UIApplication.shared.keyWindow!.bringSubview(toFront: YourViewHere)
Swift 4:
UIApplication.shared.keyWindow!.bringSubviewToFront(YourViewHere)
J'espère que ça sauve quelqu'un 10 secondes! ;)
J'avais besoin de ça une fois. J'ai créé une classe UIView
personnalisée - 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
Demandez à votre vue d'étendre cette classe. Bien sûr, cela garantit qu'une sous-vue est avant tout une vue parentale.
Pour autant que j'ai connu zposition est un meilleur moyen.
self.view.layer.zPosition = 1;
En c #, View.BringSubviewToFront (childView); YourView.Layer.ZPosition = 1; les deux devraient fonctionner.
xamarin ios: this.InsertSubview (subview_youwant_beback, 0);
Dans Swift 4.2
UIApplication.shared.keyWindow!.bringSubviewToFront(yourView)
Source: https://developer.Apple.com/documentation/uikit/uiview/1622541-bringsubviewtofront#declarations