Всякий раз, когда мы показываем всплывающее окно, соседние области показывают различный серый цвет, а цвет значка активной панели вкладок изменяется с синего на серый, пока не появится всплывающее окно.
когда всплывающее окно закрывается, серый оттенок удаляется
Я хотел бы удалить цвет, когда всплывающее окно видно
Я погуглил, но все равно не нашел, похоже, это поведение по умолчанию.
Любая помощь, чтобы помочь мне решить проблему, приветствуется
Спасибо





Создайте собственное настраиваемое представление всплывающего окна и добавьте его в качестве подпредставления поверх основного представления вместо стандартного, предоставленного Apple.
Да, и именно поэтому вам нужен оттенок, чтобы он выглядел как всплывающий
Для этого вы можете создать собственный фон всплывающего окна UIPopoverBackgroundView.
вы можете найти приведенный ниже код для создания пользовательского CustomPopoverBgView.
CustomPopoverBgView.h
#import <UIKit/UIKit.h>
@interface CustomPopoverBgView : UIPopoverBackgroundView
{
UIImageView *_borderImageView;
UIImageView *_arrowView;
CGFloat _arrowOffset;
UIPopoverArrowDirection _arrowDirection;
}
@end
CustomPopoverBgView.m
#import "CustomPopoverBgView.h"
#define CONTENT_INSET 10.0
#define CAP_INSET 25.0
#define ARROW_BASE 25.0
#define ARROW_HEIGHT 25.0
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self){
self.layer.shadowColor = [[UIColor clearColor] CGColor];
_borderImageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"popover-bg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(CAP_INSET,CAP_INSET,CAP_INSET,CAP_INSET)]];
_arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"]];
[self addSubview:_borderImageView];
[self addSubview:_arrowView];
}
return self;
}
+(UIEdgeInsets)contentViewInsets{
return UIEdgeInsetsMake(CONTENT_INSET, CONTENT_INSET, CONTENT_INSET, CONTENT_INSET);
}
+(CGFloat)arrowHeight{
return ARROW_HEIGHT;
}
+(CGFloat)arrowBase{
return ARROW_BASE;
}
- (CGFloat) arrowOffset {
return _arrowOffset;
}
- (void) setArrowOffset:(CGFloat)arrowOffset {
_arrowOffset = arrowOffset;
}
- (void)setArrowDirection:(UIPopoverArrowDirection)arrowDirection {
_arrowDirection = arrowDirection;
}
- (UIPopoverArrowDirection)arrowDirection {
return _arrowDirection;
}
@end
Вызов CustomPopoverBgView в UIPopoverController
UIButton *btn = (UIButton *)sender;
ViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"dddddd"];
controller.view.backgroundColor = [UIColor redColor];
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:controller] ;
popoverController.popoverBackgroundViewClass = [CustomPopoverBgView class];
[popoverController presentPopoverFromRect:btn.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:true];
Надеюсь, что это поможет вам.
Вы можете улучшить свой ответ, предоставив код, демонстрирующий использование настраиваемого фонового представления.
Как я могу использовать это вместо popovercontroller? Пожалуйста, объясните мне спасибо
Большое спасибо, это работает. Я пропустил назначение вам награды, извините за это. Цвет панели вкладок становится серым, когда появляется всплывающее окно .. можно ли назначить прозрачный цвет для этого тоже
это не будет выглядеть как всплывающее окно, правильно, я имею в виду поверх какого-то другого представления. Я имею в виду, что другие представления должны быть ниже пользовательского представления всплывающего окна