美文网首页
UIWindow的那些坑文章

UIWindow的那些坑文章

作者: Wind_Z | 来源:发表于2017-08-04 19:23 被阅读0次

问题背景

起因是接手了一个状态栏自定义view的UI显示问题,原本以为只是一个简答的UI问题,没想到在自测以及验证当中,发掘出了一系列UIWindow的各种坑

先说需求

先简单说一下产品和交互需求
1.客服的会话如果没有处理,在第X分钟会收到即将超时提醒;
2.当有即将超时提醒的时候,会持续显示在状态栏上,而这个显示是全局的,基本上除了登录页面,App每个页面都会在状态栏显示;
3.当用户点击状态栏的时候,会跳转到客服列表页面,并且能够返回到之前的页面;

技术实现

iOS要在状态栏上显示自定义视图,唯一方式是以UIWindow的方式覆盖在上面,然后加入相应的事件处理

引发的各种坑

如果熟悉iOS UI机制,可以知道UIWindow是一个层级比较高的特殊窗口,所有的UIView必须附加在某一个UIWindow上。而我们App启动的时候,会初始化一个UIWindow的主视图,为了便于区分,这边叫做MainWindow,而我们的状态栏自定义视图叫做StatusBarWindow,接着说说坑

  1. 首先是KeyWindow,这个是我们开发当中经常使用到的,比如添加一个全局视图或者不好拿到当前视图时我们通常都会想到直接添加到KeyWindow上。而KeyWindow恰恰有可能并不是MainWindow,比如我们自定义的StatusBarWindow,就会出现很诡异的问题,各种视图被添加到了状态栏上;
  2. 一些添加MainWindow上的UIView,当我们跳转到客服列表的时候,直接被带到了客服列表页面,导致视图显示错乱;
  3. 存在其他UIWindow的情况,没办法跳转到客服列表页面,因为当前的MainWindow被覆盖了。并且将其他UIWindow resignKeyWindow之后,我们自定义的StatusBarWindow有可能变成KeyWindow;
  4. 如果页面当前有Presented的Controller,点击没办法跳转跳转到客服列表页面;
  5. UIAlertView神一般的存在,即使UIWindowLevelStatusBar的级别的Window也是无法点击
  6. 如果KeyWindow不是主Window的话会引起主Window的视图长按,摇一摇等事件失效

解决方案

  1. 监听KeyWindow的状态,防止自定义的StatusBarWindow成为KeyWindow;
  2. 在跳转时需要处理以上所列的各种异常情况,清除MainWindow上跟主视图无关的其他Sub Views;
  3. 最好的解决方案是和产品讨论其他更友好的交互方式,摒弃这种不科学的展示和交互行为;

开发原则

  1. 尽量避免使用UIWindow;
  2. 尽量避免将自定义的View添加到KeyWindow上,如果需要最好加到MainWindow;

相关文章

  • UIWindow的那些坑文章

    问题背景 起因是接手了一个状态栏自定义view的UI显示问题,原本以为只是一个简答的UI问题,没想到在自测以及验证...

  • UIWindow、UIView、CALayer

    UIWindow的windowLevel属性 UIWindow简单介绍 UIWindow详解及踩坑 UIWindo...

  • UIWindow的坑

    自定义创建Window 注意: [window makeKeyWindow];window.hidden = NO...

  • UIWindow

    目录:1、UIWindow简介2、UIWindow的创建3、获取UIWindow 1、UIWindow简介 UIW...

  • UIWindow的一些坑

    UIWindow继承自UIView,其初始化方法有两个,init;和initWithFrame:使用initWit...

  • UIWindow详解及踩坑

    一、问题背景 最近需求量放缓,想起了以前曾经later的小需求,也就是弹出来的AlertView中间的文本框输入一...

  • UIWindow 原理与巧妙使用 makeKeyAndVisib

    - UIWindow 简介- UIWindow 概述- 我们可以使用 UIWindow 来作什么?- makeKe...

  • iOS开发之UIWindow的使用

    一、UIWindow简介 UIWindow是最顶级的界面容器。UIWindow继承自UIView。 UIWindo...

  • UIWindow讲解

    1.UIWindow & UIWindowLevel 一、简单介绍UIWindow是什么? UIWindow是一种...

  • iOS学习笔记(七)——UI基础UIButton

    前面写了UIWindow、UIViewController,那些都是一些框架,框架需要填充上具体的view才能...

网友评论

      本文标题:UIWindow的那些坑文章

      本文链接:https://www.haomeiwen.com/subject/qwjblxtx.html