Приведение подсмотра перед всеми другими видами
В настоящее время я работаю над интеграцией поставщика рекламы в свое приложение. Я хочу разместить сообщение об исчезновении перед объявлением, пока оно показывается, но полностью не выполнено.
Я сделал функцию, которая добавляет subview к моему текущему виду и пытается вывести его на передний план, используя
[self.view bringSubviewToFront:mySubview]
Функция запускает уведомление о загрузке объявления (уведомление из SDK adprovider). Тем не менее, мой subview не заканчивается перед объявлением. Я предполагаю, что рекламный агент сделал это затруднительно, но я хочу сделать это независимо. В настоящее время я обсуждаю с поставщиком, разрешено ли это или нет. Но пока я просто хочу посмотреть, возможно ли это.
Есть ли в любом случае я могу заставить подзаголовок быть самым лучшим видом, таким образом, чтобы он ничем не мешал?
Ответы
Ответ 1
Что делать, если вид рекламного провайдера не добавлен в self.view
, а что-то вроде [UIApplication sharedApplication].keyWindow
?
Попробуйте что-то вроде:
[[UIApplication sharedApplication].keyWindow addSubview:yourSubview]
или
[[UIApplication sharedApplication].keyWindow bringSubviewToFront:yourSubview]
Ответ 2
попробуйте следующее:
self.view.layer.zPosition = 1;
Ответ 3
Swift 2 версия ответа Джере:
UIApplication.sharedApplication().keyWindow!.bringSubviewToFront(YourViewHere)
Свифт 3:
UIApplication.shared.keyWindow!.bringSubview(toFront: YourViewHere)
Свифт 4:
UIApplication.shared.keyWindow!.bringSubviewToFront(YourViewHere)
Надеюсь, это сэкономит кому-то 10 секунд! ;)
Ответ 4
Мне нужно было это сделать один раз. Я создал собственный 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:@"[email protected]"]) {
[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:@"[email protected]"];
}
[super willMoveToSuperview:newSuperview];
}
- (void)didMoveToSuperview {
[super didMoveToSuperview];
if (self.superview) {
[self.superview addObserver:self forKeyPath:@"[email protected]" options:0 context:nil];
}
}
@end
У вас есть вид расширения этого класса. Разумеется, это гарантирует, что subview является, прежде всего, его взглядами на сестры.
Ответ 5
Насколько я испытал zposition, это лучший способ.
self.view.layer.zPosition = 1;
Ответ 6
В Swift 4.2
UIApplication.shared.keyWindow!.bringSubviewToFront(yourView)
Источник: https://developer.apple.com/documentation/uikit/uiview/1622541-bringsubviewtofront#declarations
Ответ 7
xamarin ios: this.InsertSubview(subview_youwant_beback, 0);
Ответ 8
В С# View.BringSubviewToFront(childView); YourView.Layer.ZPosition = 1; оба должны работать.