iOS弹出框如何去除阴影

Posted

技术标签:

【中文标题】iOS弹出框如何去除阴影【英文标题】:iOS popover how to remove the shade 【发布时间】:2018-05-19 16:54:36 【问题描述】:

每当我们显示弹出框时,相邻区域都会显示不同的灰色,并且活动标签栏图标颜色会从蓝色变为灰色,直到弹出框出现。

当弹出框被关闭时,灰色阴影被移除

我想在弹出框可见时移除颜色

我用谷歌搜索,但无论如何我都找不到这种默认行为。

感谢任何帮助我解决问题的帮助

谢谢

【问题讨论】:

【参考方案1】:

为此,您可以创建自己的自定义弹出框背景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

UIPopoverController中调用CustomPopoverBgView

 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 ?请解释一下谢谢 非常感谢它有效。我错过了向您分配赏金对此感到抱歉。弹出窗口出现时标签栏颜色变为灰色.. 是否也可以为此分配 clearcolor 跨度> 【参考方案2】:

创建您自己的自定义弹出视图并将其作为子视图添加到您的主视图之上,而不是 Apple 提供的默认视图。

【讨论】:

它看起来不像弹出框,我的意思是在其他视图之上。我的意思是其他视图必须在自定义弹出框视图下方 是的,这就是为什么你需要一个阴影让它看起来像一个弹出视图

以上是关于iOS弹出框如何去除阴影的主要内容,如果未能解决你的问题,请参考以下文章

iOS UITesting 如何关闭弹出框(iPad 弹出框不提醒样式)

自制弹出框所踩的坑

iOS:当视图位于弹出框后面时,我如何注意到?

在 didSelectRowAtIndexPath 上关闭 ios 中的弹出框

IOS:用表格视图填充弹出框

如何在 iOS 6 中使用 UIPopoverBackgroundView 呈现透明弹出框