iOS всплывающее окно, как убрать тень

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

когда всплывающее окно закрывается, серый оттенок удаляется

Я хотел бы удалить цвет, когда всплывающее окно видно

Я гуглил, но все равно не смог найти похожее поведение по умолчанию.

любая помощь, чтобы помочь мне решить проблему, приветствуется

Спасибо


person Elstine P    schedule 19.05.2018    source источник


Ответы (2)


Для этого вы можете создать собственный настраиваемый фон всплывающего окна для 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];

Надеюсь, что это поможет вам.

person MobileMatrix    schedule 28.05.2018
comment
Вы можете улучшить свой ответ, предоставив код, демонстрирующий использование пользовательского фонового представления. - person allenh; 31.05.2018
comment
Как я могу использовать это вместо popovercontroller? Пожалуйста, объясните мне спасибо - person Elstine P; 01.06.2018
comment
Большое спасибо, это работает. Я пропустил выделение вам вознаграждения, извините за это. Цвет панели вкладок становится серым, когда появляется всплывающее окно.. можно ли также назначить для этого прозрачный цвет - person Elstine P; 04.06.2018

Создайте свой собственный всплывающий вид и добавьте его в качестве подвида поверх основного представления вместо стандартного, предоставленного Apple.

person rak appdev    schedule 19.05.2018
comment
это не будет выглядеть как всплывающее окно, я имею в виду поверх какого-либо другого представления. Я имею в виду, что другие представления должны быть ниже пользовательского всплывающего представления. - person Elstine P; 21.05.2018
comment
Да, и именно поэтому вам нужен оттенок, чтобы он выглядел как всплывающее окно. - person rak appdev; 22.05.2018