iOS 筛选视图的隐藏方案

简介: iOS 筛选视图的隐藏方案

前言

  • 背景:

最近开发横屏的电子签名,发现筛选视图的蒙版挡住了电子签名界面

https://blog.csdn.net/z929118967/article/details/112467986

  • 问题的具体描述:

首次跳转到采集签名页面,有一半,屏幕是暗的,点击屏幕后才正常. 且这样的情况下查看商户协议和确认签名按钮无法点击.

image.png

  • 重现方法:

从商户列表去新增进件的商户

  • 问题的原因:

之前商户列表的筛选视图和蒙版居于keyWindow的顶部视图,隐藏时没有考虑横屏的情况,导致电子签名切换到横屏的时候,并没有被移除到屏幕之外。具体原因是:商户列表的筛选视图隐藏的方式是采用的一种不推荐的小技巧(将筛选视图的x(视图的左侧)设置为竖屏状态下的屏幕宽度1.15倍。这样搜索视图就移动到屏幕右侧,在竖屏就看不见,而在电子签名切换到横屏的时候,就展现了)

I 、解决方案:

移动筛选视图到屏幕外的隐藏方式必要要移除到横屏以及竖屏之外。

1.1.具体的做法:

1、电子签名视图即将展示的 时候,保证先设置View约束,再进行切换横屏。

2、通过修改筛选视图的隐藏方式来保证切换横屏之后电子签名界面始终在最前面

(不推荐使用;self.tabBarController.view.layer.zPosition = 999和[UIApplication.sharedApplication.keyWindow bringSubviewToFront:self.tabBarController.view];

1.2  具体的修改方案是:

1)设置筛选视图earchV和它的蒙版alphaView为横屏也看不见(#define searchVHiddenx (kWidth * 9.15 + kWidth))

2) 进入商户列表的商户,如果没有点击筛选按钮,提前创建的蒙蔽视图alphaView要保证是透明的并且是移除到横竖屏之外。

(或者创建蒙蔽之后直接触发蒙蔽的点击事件来隐藏搜索searchV,并要设置蒙蔽为透明的。)

II、错误的代码示例:

weakSelf.alphaView.frame = CGRectMake(kWidth, 0, kWidth, kHeight);
    [UIView animateWithDuration:0.5 animations:^{
        weakSelf.alphaView.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.0];
    }];
    [UIView animateWithDuration:0.5 animations:^{
        weakSelf.searchV.frame = CGRectMake(kWidth * 0.15 + kWidth, 0, kWidth * 0.85, kHeight);
    }];

III、正确的代码:

- (void)resignTapGestureAction:(UITapGestureRecognizer *)tap
{
    __weak typeof(self) weakSelf = self;
    // 往右滑隐藏筛选视图
    [UIView animateWithDuration:0.5 animations:^{
        weakSelf.searchV.frame = CGRectMake(searchVHiddenx, 0, weakSelf.wid, kHeight);
        weakSelf.alphaView.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.0];
    }];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        weakSelf.alphaView.frame = CGRectMake(searchVHiddenx, 0, kWidth, kHeight);
    });
}
  • 由于之前同事写的代码是到处copy,并没有封装,现只能抽取一个方法
- (void)resignTapGestureAction:(UITapGestureRecognizer *)tap
{
    return [QCT_Common resignTapGestureAction:nil searchV:_searchV alphaView:_alphaView];
    }
+ (void)resignTapGestureAction:(UITapGestureRecognizer *)tap searchV:(UIView*)searchV alphaView:(UIView*)alphaView{
    CGFloat searchVwid = kWidth * 0.85;
    [UIView animateWithDuration:0.5 animations:^{
        searchV.frame = CGRectMake(searchVHiddenx, 0, searchVwid, kHeight);
    alphaView.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.0];
    }];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        alphaView.frame = CGRectMake(searchVHiddenx, 0, kWidth, kHeight);
    });
}
  • 安全起见,保证的做法是viewWillDisappear方法执行隐藏筛选View的方法
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [QCTStatusBarTool setStatusBarBackgroundColor:[UIColor clearColor]];
    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
    [self resignTapGestureAction:nil];
}

see also

目录
相关文章
|
7月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
117 0
|
移动开发 安全 数据安全/隐私保护
ios安全加固 ios 加固方案
4.1字符串加密字符串会暴露APP的很多关键信息,攻击者可以根据界面显示的字符串,快速找到相关逻辑的处理函数,从而进行分析破解。加密字符串可以增加攻击者阅读代码的难度以及根据字符串静态搜索的难度。
|
4月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
190 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
4月前
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
380 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
4月前
|
测试技术 数据安全/隐私保护 iOS开发
iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境
iOS自动化测试方案的第四部分,涵盖了基础环境准备、iPhone虚拟机设置、MacOS虚拟机与iPhone真机的连接,以及扩展问题和代码示例,确保读者能够顺利完成环境搭建并进行iOS自动化测试。
437 0
iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境
|
4月前
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
241 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
4月前
|
测试技术 开发工具 虚拟化
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
这篇文章提供了一份保姆级的教程,指导如何在MacOS虚拟机上安装Xcode,包括环境准备、基础软件安装以及USB扩展插件的使用,以实现iOS自动化测试方案的第一步。
233 0
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
|
7月前
|
移动开发 安全 数据安全/隐私保护
ios安全加固 ios 加固方案
ios安全加固 ios 加固方案
98 1
ios安全加固 ios 加固方案
|
7月前
|
安全 数据安全/隐私保护 虚拟化
iOS应用加固方案解析:ipa加固安全技术全面评测
iOS应用加固方案解析:ipa加固安全技术全面评测
133 3
|
7月前
|
移动开发 安全 数据安全/隐私保护
【教程】Ipa Guard为iOS应用提供免费加密混淆方案
概述:使用ios加固工具对ios代码保护,保护ios项目中的核心代码,