状态栏显示控制方法、装置、计算机设备和存储介质与流程



1.本技术涉及计算机技术领域,特别是涉及一种状态栏显示控制方法、装置、计算机设备和存储介质。


背景技术:



2.随着计算机技术的发展,出现了状态栏显示控制技术,状态栏是指在移动终端顶部显示运营商、网络、时间、电量等信息的那一栏。
3.传统技术中,对于移动终端的每个页面,都会有一个对应的viewcontroller(视图控制器)来管理页面视图的显示,当捕获到页面发生跳转或返回,对应的视图控制器会通过viewwillappear、viewdisapear等方法对页面跳转进行监控拦截,从而对页面的状态栏进行设置。
4.然而,若通过addsubview(添加子视图)的方式进行页面添加或切换,由于这种方式相当于把视图直接添加到原有页面,在视图控制器中不能够区分是普通的添加视图还是页面产生跳转,会监听不到页面改变状态,导致系统设置状态栏方法失效,从而不能对页面的状态栏进行设置,不能够正确显示页面的状态栏。


技术实现要素:



5.基于此,有必要针对上述技术问题,提供一种能够正确显示页面状态栏的状态栏显示控制方法、装置、计算机设备和存储介质。
6.一种状态栏显示控制方法,所述方法包括:
7.响应视图切换操作,获取与视图切换操作对应的视图标识;
8.当确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数;
9.当视图参数满足预设的页面尺寸要求、且侦测到对转场动画接口的调用时,确定添加子视图操作为添加页面操作,根据视图标识获取对应的状态栏修改函数;
10.通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。
11.一种状态栏显示控制装置,所述装置包括:
12.响应模块,用于响应视图切换操作,获取与视图切换操作对应的视图标识;
13.获取模块,用于当确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数;
14.判断模块,用于当视图参数满足预设的页面尺寸要求、且侦测到对转场动画接口的调用时,确定添加子视图操作为添加页面操作,根据视图标识获取对应的状态栏修改函数;
15.调整模块,用于通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。
16.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
17.响应视图切换操作,获取与视图切换操作对应的视图标识;
18.当确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数;
19.当视图参数满足预设的页面尺寸要求、且侦测到对转场动画接口的调用时,确定添加子视图操作为添加页面操作,根据视图标识获取对应的状态栏修改函数;
20.通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。
21.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
22.响应视图切换操作,获取与视图切换操作对应的视图标识;
23.当确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数;
24.当视图参数满足预设的页面尺寸要求、且侦测到对转场动画接口的调用时,确定添加子视图操作为添加页面操作,根据视图标识获取对应的状态栏修改函数;
25.通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。
26.上述状态栏显示控制方法、装置、计算机设备和存储介质,通过响应视图切换操作,获取与视图切换操作对应的视图标识,在确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数,利用视图参数是否满足预设的页面尺寸要求并是否侦测到对转场动画接口的调用,来确定添加子视图操作是否为添加页面操作,能够准确实现对添加页面操作的确定,从而能够在确定添加子视图操作为添加页面操作时,根据视图标识获取对应的状态栏修改函数,通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,解决通过添加子视图方式进行页面添加或切换时,视图控制器监听不到页面改变状态,系统设置状态栏方法会失效的问题,正确显示页面的状态栏。
附图说明
27.图1为一个实施例中状态栏显示控制方法的流程示意图;
28.图2为一个实施例中初始化管理工作的流程示意图;
29.图3为另一个实施例中状态栏显示控制方法的流程示意图;
30.图4为一个实施例中状态栏显示控制装置的结构框图;
31.图5为一个实施例中计算机设备的内部结构图。
具体实施方式
32.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
33.在一个实施例中,如图1所示,提供了一种状态栏显示控制方法,本实施例以该方
法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器,也可以为区块链中的节点。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术在此不做限制。本实施例中,该方法包括以下步骤:
34.步骤102,响应视图切换操作,获取与视图切换操作对应的视图标识。
35.其中,视图切换操作是指对当前显示的视图进行切换,切换到新视图的操作。比如,视图切换操作具体可以是指页面切换操作,即切换到新的页面。又比如,视图切换操作具体可以是指添加子视图操作,此时需要进一步判断所添加的子视图是页面视图还是非页面视图。视图标识与即将要切换到的新视图对应,是新视图的唯一标识。比如,视图标识具体可以是指新视图的配置id(identity document,身份标识号)。
36.具体的,当用户想要进行视图切换时,会操作终端进行视图切换操作,终端会响应视图切换操作,获取与视图切换操作对应的视图标识。比如,当用户想要跳转至新页面进行浏览时,可操作终端上与新页面对应的控件实现视图切换操作。
37.步骤104,当确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数。
38.其中,添加子视图操作是指通过addsubview的方式进行视图添加或切换,由于这种方式相当于把视图直接添加到原有页面,在视图控制器中不能够区分是否是页面产生跳转,因此需要获取与视图切换操作对应的视图参数来确定该添加子视图操作是否为添加页面操作。视图参数是指要添加的视图的尺寸。比如,视图参数具体可以是指要添加的视图的坐标和视图宽高。举例说明,视图参数可以通过获取view.fram得到。
39.具体的,用户已预先对添加子视图方法进行重写,通过重写后的添加子视图方法可对添加子视图操作进行监控,当终端响应视图切换操作时,该重写后的添加子视图方法可对添加子视图操作进行监控,以确定视图切换操作是否为添加子视图操作。当确定视图切换操作为添加子视图操作时,终端会获取与视图切换操作对应的视图参数,以便根据视图参数确定添加子视图操作是否为添加页面操作。
40.步骤106,当视图参数满足预设的页面尺寸要求、且侦测到对转场动画接口的调用时,确定添加子视图操作为添加页面操作,根据视图标识获取对应的状态栏修改函数。
41.其中,预设的页面尺寸要求是指预先设置的对页面视图的尺寸要求,可按照需要自行设置。比如,页面尺寸要求具体可以是和显示屏幕的宽高一致。转场动画是指页面跳转时落地页从右向左渐入或者从下到上渐入等渐入方式。状态栏是指是指在移动终端顶部显示运营商、网络、时间、电量等信息的那一栏。状态栏修改函数是指对待显示页面视图对应的状态栏进行修改的函数,具体包括设置状态栏样式、隐藏/显示状态栏、设置状态栏颜等设置参数以及对状态栏设置方法的调用,状态栏修改函数与待显示页面视图对应,状态栏修改函数可根据待显示页面视图预先设置并进行下发。比如,用户在应用程序内部操作到不同页面时,根据页面的不同状态栏会显示不一样。比如,当页面a的主调为白时,状
态栏可能需要显示为白,而当从页面a跳转至页面b,页面b的主调为红时,状态栏会对应的需要显示为红。
42.具体的,终端会比对视图参数和预设的页面尺寸要求,当视图参数满足预设的页面尺寸要求、且侦测到对转场动画接口的调用时,确定添加子视图操作为添加页面操作,终端会进一步根据视图标识获取对应的状态栏修改函数,以对状态栏进行调整。其中,在应用程序工程内部对转场动画接口的调用时有统一的入口函数的,只要在调用的入口函数中能够捕获到视图标识,就可以确定侦测到了对转场动画接口的调用。
43.步骤108,通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。
44.其中,预设的自定义设置状态栏方法是指预先设置的对状态栏进行设置的方法,包括设置状态栏样式、隐藏/显示状态栏、设置状态栏颜等方法。需要说明的是,该自定义设置状态栏方法并不影响视图控制器中的系统设置状态栏方法的正常执行,终端会新建uiapplication的分类controlstatusbar(控制状态栏),并在该控制状态栏内部新增设置状态栏样式、隐藏/显示状态栏、设置状态栏颜等方法,通过该控制状态栏对系统设置状态栏方法执行钩子操作,在捕获到系统设置状态栏方法时,调用在控制状态栏中增加的自定义状态栏设置发方法中执行。其中,分类是指开发中的一种技术,能够给系统类增加方法。
45.具体的,在获取到状态栏修改函数后,终端会通过状态栏修改函数调用预设的自定义设置状态栏方法,根据状态栏修改函数中的设置状态栏样式、隐藏/显示状态栏、设置状态栏颜等设置参数对状态栏进行调整,显示状态栏调整后的页面。
46.其中,状态栏修改函数是与待显示页面视图对应的,在状态栏修改函数中已预先设置了与待显示页面视图对应的状态栏显示方式,在对状态栏进行调整时,首先会判断是否需要显示状态栏,若需要隐藏状态栏,则在对状态栏进行调整时会直接将状态栏隐藏,显示状态栏调整后的页面时该页面上方不会有状态栏,若不需要隐藏状态栏,终端会进一步根据状态栏修改函数中的设置状态栏样式以及设置状态栏颜等设置参数对状态栏进行调整,以显示状态栏调整后的页面。
47.进一步的,其中的设置状态栏颜是为了使得状态栏颜与待显示页面视图的颜适配,举例说明,设置状态栏颜对状态栏进行调整的方式可以为:终端获取待显示页面视图的标题栏的第一颜类别信息,根据第一颜类别信息,确定状态栏的颜适配信息,根据颜适配信息,配置状态栏的颜,以使得状态栏的颜与待显示页面视图的标题栏的颜相匹配。又举例说明,设置状态栏颜对状态栏进行调整的方式还可以为:终端获取待显示页面视图的标题栏的第一颜类别信息以及状态栏的第二颜类别信息,根据第一颜类别信息和第二颜类别信息,确定标题栏的颜与状态栏的颜是否相匹配,当标题栏的颜与状态栏的颜不匹配时,执行根据第一颜类别信息,对状态栏的颜进行调整的操作。再举例说明,设置状态栏颜对状态栏进行调整的方式还可以为:在设置状态栏颜的设置参数中预先存储有颜调整信息,终端直接根据颜调整信息对状态栏的颜进行调整。其中,第一颜类别信息、第二颜类别信息以及颜调整信息具体可以是指具体的颜的类别,如红、蓝、黄等,也可以是指颜的rgb(red/green/blue,红/绿/蓝)值,本实施例在此处不做具体限定。上述状态栏显示控制方法,通过响应视图切
换操作,获取与视图切换操作对应的视图标识,在确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数,利用视图参数是否满足预设的页面尺寸要求并是否侦测到对转场动画接口的调用,来确定添加子视图操作是否为添加页面操作,能够准确实现对添加页面操作的确定,从而能够在确定添加子视图操作为添加页面操作时,根据视图标识获取对应的状态栏修改函数,通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,解决通过添加子视图方式进行页面添加或切换时,视图控制器监听不到页面改变状态,系统设置状态栏方法会失效的问题,正确显示页面的状态栏。
48.在一个实施例中,当确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数之前,还包括:
49.响应对添加子视图方法的重写操作,通过重写后的添加子视图方法对添加子视图操作进行监控。
50.具体的,用户会对重写keywindow下的添加子视图方法,终端会响应对添加子视图方法的重写操作,从而可以通过重写后的添加子视图方法对添加子视图操作进行监控。举例说明,重写的方式可以为:自定义txwindow类继承uiwindow类,在txwindow类的.m文件中重写addsubview(添加子视图)。
51.本实施例中,通过响应对添加子视图方法的重写操作,能够通过重写后的添加子视图方法对添加子视图操作进行监控。
52.在一个实施例中,状态栏显示控制方法还包括:
53.根据视图标识查询是否存在对应的视图控制器;
54.当存在与视图标识对应的视图控制器时,确定视图切换操作为页面切换操作;
55.调用对应的视图控制器中的系统设置状态栏方法;
56.对系统设置状态栏方法执行钩子操作,调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。
57.其中,视图控制器用于管理页面视图的显示,当页面发生跳转或返回时,视图控制器会通过viewwillappear、viewdisapear等方法对页面跳转进行监控拦截,从而对页面的状态栏进行设置。钩子操作用于捕获系统设置状态栏方法,得到对系统设置状态栏方法的控制权,从而对系统设置状态栏方法进行处理或者修改,本实施例中具体的修改方式为调用预设的自定义设置状态栏方法对状态栏进行调整。
58.具体的,若视图切换操作为页面切换操作时,必定存在与视图标识对应的视图控制器,而对于添加子视图操作来说,并不存在与其的视图标识对应的视图控制器。因此,终端只需要根据视图标识查询是否存在对应的视图控制器,即可确定视图切换操作是否为页面切换操作。当存在与视图标识对应的视图控制器时,即可确定视图切换操作为页面切换操作。进一步的,在终端中存在预先设置的堆空间,在堆空间中存储有视图标识以及对应的视图控制器的获取地址,当根据视图标识在堆空间中查询到对应的视图控制器的获取地址时,即可确定存在与视图标识对应的视图控制器。此外,在终端中还存在预先设置的可变数组,可变数组中存储有已执行页面切换对应的状态栏修改记录,该状态栏修改记录的形式为视图标识-视图控制器的获取地址/视图标识-状态栏修改函数的获取地址。由于堆空间中存储的数据过多,因此在获取状态栏修改函数或查询并获取视图控制器时,终端会优先到可变数组中进行查询,当可变数组中不存在对应数据时再到堆空间中进行查询,以提高
获取/查询效率。
59.具体的,当存在与视图标识对应的视图控制器时,终端会调用对应的视图控制器中的系统设置状态栏方法以对状态栏进行调整,此时由于提前新建有用于hook(钩子)系统设置状态栏方法的控制状态栏分类,终端会对系统设置状态栏方法执行钩子操作,以调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。
60.举例说明,用户会重写控制状态栏分类中的load方法,在load方法中实现对系统设置状态栏方法的hook,具体包括以下步骤:1、通过class_getinstancemethod(获取类的实例方法)获取系统设置状态栏方法和自定义设置状态栏方法;2、通过method_exchangeimplemtation(交换方法的实现)方法,对系统设置状态栏方法进行交换;3.、在自定义设置状态栏方法内部,调用self(即自定义设置状态栏方法)和系统设置状态栏方法,保证系统设置状态栏方法能够正常执行。从而可以在捕获到系统设置状态栏方法时,将调用替换到我们在控制状态栏分类中增加的自定义设置状态栏方法。
61.本实施例中,通过根据视图标识查询是否存在对应的视图控制器,能够实现对页面切换操作的确定,从而通过调用对应的视图控制器中的系统设置状态栏方法,对系统设置状态栏方法执行钩子操作,调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面,能够实现对状态栏的调整。
62.在一个实施例中,状态栏显示控制方法还包括:
63.当视图切换操作为初次执行时,根据视图标识以及与视图切换操作对应的状态栏调整方式生成状态栏修改记录,将状态栏修改记录存入预设的可变数组中。
64.其中,预设的可变数组用于保存状态栏显示/隐藏的修改记录和状态栏style(包括状态栏样式和状态栏颜)的修改记录,可变数组是作为索引存在的,这里的修改记录具体可以是指状态栏调整方式的获取地址。状态栏调整方式与视图切换操作对应,不同的视图切换操作采用的状态栏调整方式不同。比如,针对页面切换操作,其对应的状态栏调整方式为利用视图控制器进行调整,则对应的状态栏修改记录为视图控制器的获取地址。又比如,针对添加子视图操作,其对应的状态栏调整方式为利用状态栏修改函数进行调整,则对应的状态栏修改记录为状态栏修改函数的获取地址。具体的,预设的可变数组的数量可以为两个,分别用于保存状态栏显示/隐藏的修改记录和状态栏style的修改记录。
65.具体的,终端会在控制状态栏分类中新增可变数组,用于保存状态栏显示/隐藏的修改记录和状态栏style的修改记录,利用可变数组实现堆栈管理。当视图切换操作为初次执行时,终端会根据视图标识以及与视图切换操作对应的状态栏调整方式生成状态栏修改记录,将状态栏修改记录存入预设的可变数组中。需要说明的是,在分类中是不能直接增加属性的,若需要将可变数组作为分类的属性,可通过methodswizzling技术中的objc_setassociatedobject(建立关联属性)函数保存可变数组。在将状态栏修改记录存入预设的可变数组中时,需要通过set方法选择器对预设的可变数组进行赋值。其中,methodswizzling技术为ios开发使用的语法特性,使用该技术可以让ios程序在运行过程中进行hook。
66.本实施例中,通过根据视图标识以及与视图切换操作对应的状态栏调整方式生成状态栏修改记录,将状态栏修改记录存入预设的可变数组中,能够实现对状态栏修改记录的存储,以便再次进行相同页面切换时,可以快速的从可变数组中获取到对应的状态栏修
改记录实现对状态栏的调整。
67.在一个实施例中,将状态栏修改记录存入预设的可变数组中之后,还包括:
68.响应页面返回操作,获取与页面返回操作对应的返回页面标识;
69.根据返回页面标识从可变数组中获取对应的状态栏修改记录;
70.根据与返回页面标识对应的状态栏修改记录对状态栏进行调整,显示状态栏调整后的页面。
71.具体的,当用户执行页面返回操作时,终端会响应页面返回操作,获取与页面返回操作对应的返回页面标识,根据返回页面标识从可变数组中获取对应的状态栏修改记录,根据与返回页面标识对应的状态栏修改记录获取与待显示页面视图对应的视图控制器/状态栏修改函数的获取地址,利用该获取地址获取到视图控制器/状态栏修改函数,以利用视图控制器/状态栏修改函数对待显示页面的状态栏进行调整,显示状态栏调整后的页面。在从可变数组中获取对应的状态栏修改记录时,终端会调用objc_getassociatedobjec(获取关联属性)方法,传入get方法选择器,从get方法选择器中获取可变数组中对应的状态栏修改记录。
72.本实施例中,通过响应页面返回操作,获取与页面返回操作对应的返回页面标识,能够快速的根据返回页面标识从可变数组中获取对应的状态栏修改记录,从而利于该与返回页面标识对应的状态栏修改记录实现对状态栏的调整,提高了调整效率。
73.在一个实施例中,状态栏显示控制方法还包括:
74.获取主线程对象的第一地址以及当前调用线程的第二地址,当前调用线程为执行对状态栏进行调整的线程;
75.当第一地址与第二地址不相同时,将对状态栏进行调整放入主线程中执行。
76.其中,主线程对象是指在主线程中执行的对象。当前调用线程为执行对状态栏进行调整的线程。
77.具体的,由于在开发中,修改ui(user interface)、执行事件必须在主线程进行,否则会产生程序崩溃等错误,因此在执行对状态栏进行调整时,需要判断该调整是否是在主线程中执行,终端会获取主线程对象的第一地址以及当前调用线程的第二地址,比对第一地址和第二地址,当第一地址与第二地址不相同时,表示当前调用线程不是主线程,此时需要将对状态栏进行调整放入主线程中执行。当第一地址与第二地址相同时,表示当前调用线程是主线程,此时不需要进行调整。
78.举例说明,终端可以通过nsthread.mainthread获取主线程对象的第一地址,然后通过nsthread.currentthread获取当前调用线程的第二地址,若两个线程的地址一样,则当前调用线程是主线程,若两个线程的地址不一样则是非主线程,这时终端会报警告给对应页面,并调用gcd(grand central dispatch,宏达的中央调度)函数将对状态栏进行调整放入在主线程执行。其中,具体的放入方式为:通过dispatch_get_main_queue获取主队列,然后调用gcd函数的dispatch_async开启异步任务,将对状态栏进行调整的调用放在主线程中执行。
79.本实施例中,通过获取主线程对象的第一地址以及当前调用线程的第二地址,当前调用线程为执行对状态栏进行调整的线程,当第一地址与第二地址不相同时,将对状态栏进行调整放入主线程中执行,能够确保对状态栏进行调整在主线程中执行,避免产生程
序崩溃等错误。
80.在一个实施例中,状态栏显示控制方法还包括:
81.接收页面视图调整参数,页面视图调整参数包括页面标识、切换方式以及状态栏修改数据;
82.当切换方式为添加视图切换时,存储页面标识以及状态栏修改数据;
83.当切换方式为页面切换时,根据状态栏修改数据设置与页面切换对应的视图控制器,存储页面标识和与页面切换对应的视图控制器。
84.其中,状态栏修改数据是指具体如何对页面视图的状态栏进行修改的数据,不同的切换方式所对应的状态栏修改数据不同。比如,当切换方式为添加视图切换时,对应的状态栏修改数据为状态栏修改函数。又比如,当切换方式为页面切换时,对应的状态栏修改数据为对视图控制器中状态栏进行改变的参数。
85.具体的,当线上新增页面时,服务端会下发线上新增页面的页面视图调整参数至终端,终端在接收到页面视图调整参数后,会确定线上新增页面对应的切换方式,当切换方式为添加视图切换时,会存储状态栏修改数据,将页面标识以及状态栏修改数据的获取入口直接存入预设的堆空间中,当切换方式为页面切换时,终端需要获取视图控制器模板,根据状态栏修改数据对视图控制器模板进行设置,得到与页面切换对应的视图控制器,存储该与页面切换对应的视图控制器,将页面标识和与页面切换对应的视图控制器的获取入口存入预设的堆空间中。其中,根据状态栏修改数据对视图控制器模板进行设置的方式具体可以为,抽取视图控制器模板的基类,根据状态栏修改数据在基类的viewwillappear中对状态栏进行修改。
86.本实施例中,能够在接收到页面视图调整参数后,根据切换方式的不同,实现对添加视图切换、页面切换以及其对应的状态栏修改数据的存储。
87.本技术还提供一种应用场景,该应用场景应用上述的状态栏显示控制方法。具体地,该状态栏显示控制方法在该应用场景的应用如下:
88.在响应视图切换操作之前,需要对终端进行初始化管理工作,举例流程如图2所示。
89.终端会新建uiapplication的分类controlstatusbar(控制状态栏),并在该控制状态栏内部新增设置状态栏样式、隐藏/显示状态栏、设置状态栏颜等方法,通过该控制状态栏hook系统设置状态栏方法。具体的hook设置方法可以为:1、通过class_getinstancemethod(获取类的实例方法)获取系统设置状态栏方法和自定义设置状态栏方法;2、通过method_exchangeimplemtation(交换方法的实现)方法,对系统设置状态栏方法进行交换;3、在自定义设置状态栏方法内部,调用self(即自定义设置状态栏方法)和系统设置状态栏方法,保证系统设置状态栏方法能够正常执行。从而可以在捕获到系统设置状态栏方法时,将调用替换到我们在控制状态栏分类中增加的自定义设置状态栏方法。
90.同时,终端会响应在该控制状态栏分类中新增可变数组的操作,用于保存状态栏显示/隐藏的修改记录和状态栏style的修改记录,利用可变数组实现堆栈管理。该可变数组具体可以为两个,分别为用于保存状态栏显示/因此的修改记录的statusbarisvisible和用于保存状态栏style的修改记录的statusbarstylechangehistory。此外,终端也会响应对添加子视图方法的重写操作,从而可以通过重写后的添加子视图方法对添加子视图操
作进行监控,以拦截添加视图。
91.如图3所示,初始化完成后,终端内的程序会启动,在程序启动时是默认状态栏为黑且不隐藏的。此时服务端会下发线上新增页面,具体为页面视图调整参数,在接收到页面视图调整参数后,终端会根据不同的切换方式进行相应的设置以及数据存储,当切换方式为添加视图切换时,终端会存储状态栏修改数据,将页面标识以及状态栏修改数据的获取入口直接存入预设的堆空间中,当切换方式为页面切换时,终端需要获取视图控制器模板,根据状态栏修改数据对视图控制器模板进行设置,得到与页面切换对应的视图控制器,存储该与页面切换对应的视图控制器,将页面标识和与页面切换对应的视图控制器的获取入口存入预设的堆空间中(即下发状态栏所需修改的viewcontroller)。
92.在用户进行视图切换操作(即页面开始加载/跳转/返回)时,终端会响应视图切换操作,通过重写后的添加子视图方法对添加子视图操作进行监控,并根据视图标识查询是否存在对应的视图控制器。
93.当确定视图切换操作为添加子视图操作时,终端获取与视图切换操作对应的视图参数(即监听view的宽高),当视图参数满足预设的页面尺寸要求且侦测到对转场动画接口的调用时,确定添加子视图操作为添加页面操作,根据视图标识获取对应的状态栏修改函数(即获取当前页面状态栏修改数据信息),通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面(此处对应图3中当前页面状态栏需要改变的分支)。当状态栏修改函数不调用预设的自定义设置状态栏方法时,表示当前页面状态栏不需要改变,此时会走默认设置,这里的默认设置为预先设置的状态栏默认样式。
94.当存在与视图标识对应的视图控制器时,终端会确定视图切换操作为页面切换操作,调用对应的视图控制器中的系统设置状态栏方法,终端会对系统设置状态栏方法执行钩子操作,调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。(即监听viewwillappear/viewdisapear方法,获取当前页面状态栏修改数据信息,并在当前页面状态栏需要改变时进行调整),需要说明的是,若当前页面状态栏不需要改变,则不会调用对应的视图控制器中的系统设置状态栏方法。
95.在对状态栏进行调整时,终端都需要判断与该对状态栏进行调整的当前调用线程是否为主线程,并在当前调用线程不是主线程时,会报警告给对应页面,并将对状态栏进行调整放入主线程中执行。
96.应该理解的是,虽然上述实施例涉及的各流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述实施例涉及的各流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
97.在一个实施例中,如图4所示,提供了一种状态栏显示控制装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:响应模块402、获取模块404、判断模块406和调整模块408,其中:
98.响应模块402,用于响应视图切换操作,获取与视图切换操作对应的视图标识;
99.获取模块404,用于当确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数;
100.判断模块406,用于当视图参数满足预设的页面尺寸要求、且侦测到对转场动画接口的调用时,确定添加子视图操作为添加页面操作,根据视图标识获取对应的状态栏修改函数;
101.调整模块408,用于通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。
102.上述状态栏显示控制装置,通过响应视图切换操作,获取与视图切换操作对应的视图标识,在确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数,利用视图参数是否满足预设的页面尺寸要求并是否侦测到对转场动画接口的调用,来确定添加子视图操作是否为添加页面操作,能够准确实现对添加页面操作的确定,从而能够在确定添加子视图操作为添加页面操作时,根据视图标识获取对应的状态栏修改函数,通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,解决通过添加子视图方式进行页面添加或切换时,视图控制器监听不到页面改变状态,系统设置状态栏方法会失效的问题,正确显示页面的状态栏。
103.在一个实施例中,状态栏显示控制装置还包括监控模块,监控模块用于响应对添加子视图方法的重写操作,通过重写后的添加子视图方法对添加子视图操作进行监控。
104.在一个实施例中,状态栏显示控制装置还包括处理模块,处理模块用于根据视图标识查询是否存在对应的视图控制器,当存在与视图标识对应的视图控制器时,确定视图切换操作为页面切换操作,调用对应的视图控制器中的系统设置状态栏方法,对系统设置状态栏方法执行钩子操作,调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。
105.在一个实施例中,状态栏显示控制装置还包括存储模块,存储模块用于当视图切换操作为初次执行时,根据视图标识以及与视图切换操作对应的状态栏调整方式生成状态栏修改记录,将状态栏修改记录存入预设的可变数组中。
106.在一个实施例中,调整模块还用于响应页面返回操作,获取与页面返回操作对应的返回页面标识,根据返回页面标识从可变数组中获取对应的状态栏修改记录,根据与返回页面标识对应的状态栏修改记录对状态栏进行调整,显示状态栏调整后的页面。
107.在一个实施例中,调整模块还用于获取主线程对象的第一地址以及当前调用线程的第二地址,当前调用线程为执行对状态栏进行调整的线程,当第一地址与第二地址不相同时,将对状态栏进行调整放入主线程中执行。
108.在一个实施例中,存储模块还用于接收页面视图调整参数,页面视图调整参数包括页面标识、切换方式以及状态栏修改数据,当切换方式为添加视图切换时,存储页面标识以及状态栏修改数据,当切换方式为页面切换时,根据状态栏修改数据设置与页面切换对应的视图控制器,存储页面标识和与页面切换对应的视图控制器。
109.关于状态栏显示控制装置的具体限定可以参见上文中对于状态栏显示控制方法的限定,在此不再赘述。上述状态栏显示控制装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块
对应的操作。
110.在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过wifi、运营商网络、nfc(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种状态栏显示控制方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
111.本领域技术人员可以理解,图5中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
112.在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
113.在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
114.在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
115.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。
116.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
117.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。

技术特征:


1.一种状态栏显示控制方法,其特征在于,所述方法包括:响应视图切换操作,获取与所述视图切换操作对应的视图标识;当确定所述视图切换操作为添加子视图操作时,获取与所述视图切换操作对应的视图参数;当所述视图参数满足预设的页面尺寸要求、且侦测到对转场动画接口的调用时,确定所述添加子视图操作为添加页面操作,根据所述视图标识获取对应的状态栏修改函数;通过所述状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。2.根据权利要求1所述的方法,其特征在于,所述当确定所述视图切换操作为添加子视图操作时,获取与所述视图切换操作对应的视图参数之前,还包括:响应对添加子视图方法的重写操作,通过重写后的添加子视图方法对添加子视图操作进行监控。3.根据权利要求1所述的方法,其特征在于,还包括:根据所述视图标识查询是否存在对应的视图控制器;当存在与所述视图标识对应的视图控制器时,确定所述视图切换操作为页面切换操作;调用所述对应的视图控制器中的系统设置状态栏方法;对所述系统设置状态栏方法执行钩子操作,调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。4.根据权利要求1所述的方法,其特征在于,还包括:当所述视图切换操作为初次执行时,根据所述视图标识以及与所述视图切换操作对应的状态栏调整方式生成状态栏修改记录,将所述状态栏修改记录存入预设的可变数组中。5.根据权利要求4所述的方法,其特征在于,所述将所述状态栏修改记录存入预设的可变数组中之后,还包括:响应页面返回操作,获取与所述页面返回操作对应的返回页面标识;根据所述返回页面标识从所述可变数组中获取对应的状态栏修改记录;根据与所述返回页面标识对应的状态栏修改记录对状态栏进行调整,显示状态栏调整后的页面。6.根据权利要求1-5任一项所述的方法,其特征在于,还包括:获取主线程对象的第一地址以及当前调用线程的第二地址,所述当前调用线程为执行对状态栏进行调整的线程;当所述第一地址与所述第二地址不相同时,将所述对状态栏进行调整放入主线程中执行。7.根据权利要求1所述的方法,其特征在于,还包括:接收页面视图调整参数,所述页面视图调整参数包括页面标识、切换方式以及状态栏修改数据;当所述切换方式为添加视图切换时,存储所述页面标识以及所述状态栏修改数据;当所述切换方式为页面切换时,根据所述状态栏修改数据设置与页面切换对应的视图控制器,存储所述页面标识和所述与页面切换对应的视图控制器。
8.一种状态栏显示控制装置,其特征在于,所述装置包括:响应模块,用于响应视图切换操作,获取与所述视图切换操作对应的视图标识;获取模块,用于当确定所述视图切换操作为添加子视图操作时,获取与所述视图切换操作对应的视图参数;判断模块,用于当所述视图参数满足预设的页面尺寸要求、且侦测到对转场动画接口的调用时,确定所述添加子视图操作为添加页面操作,根据所述视图标识获取对应的状态栏修改函数;调整模块,用于通过所述状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。

技术总结


本申请涉及一种状态栏显示控制方法、装置、计算机设备和存储介质。所述方法包括:响应视图切换操作,获取与视图切换操作对应的视图标识;当确定视图切换操作为添加子视图操作时,获取与视图切换操作对应的视图参数;当视图参数满足预设的页面尺寸要求、且侦测到对转场动画接口的调用时,确定添加子视图操作为添加页面操作,根据视图标识获取对应的状态栏修改函数;通过状态栏修改函数调用预设的自定义设置状态栏方法对状态栏进行调整,显示状态栏调整后的页面。采用本方法能够正确显示页面的状态栏。状态栏。状态栏。


技术研发人员:

苟亚明

受保护的技术使用者:

腾讯科技(深圳)有限公司

技术研发日:

2021.08.25

技术公布日:

2023/3/2

本文发布于:2024-09-21 15:48:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/63341.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:视图   状态栏   页面   操作
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议