• iOS开发之——巧用反射机制


    1、应用场景——自定义UITabBarController的TabBar视图
      (1)隐藏TabBar视图
      一般我们选择自定义TabBar视图有两种方式。1是将tabBar视图隐藏;2是将TabBar视图从父视图中移除,代码如下(假设,已创建UITabBarController子类):
      - (void)viewDidLoad {
      // 隐藏视图
      self.tabBar.hidden = YES;
      // 或者直接移除TabBar视图
      [self.tabBar removeFromSuperview];
      }
      当执行完以上代码后,tabBar视图“消失”了,就会显示出TabBar视图之前所占用的空白位置,如下图所示():
      
      之后,我们会将自定义的tabBar视图添加到这个空白位置,这个空白位置的高度是49。因此我们自定义的TabBar视图高度也应该是49,否则会出现Gap。
      然而有时,我们的自定义的TabBar视图高度不一定是49的高度。那么也就是说,我们需要将这紫色的页面高度进行调整。
      (2)调整视图
      在调整视图之前,我们需要看看TabBarController的视图,包含哪些子视图,代码如下:
      for (UIView *subview in self.view.subviews) {
      // 这里的self指的是TabBarController对象
      NSLog(@"subview : %@", subview);
      }
      通过控制台打印结果如下:
      subview : >
      subview : >
      从打印结果我们不难看出,TabBarController的视图包含2个子视图,一个是我们非常熟悉的UITabBar视图,大家可以仔细看看它的frame(尤其是高度),而两外一个视图名叫UITransitionView的对象。其实,当我们创建一个TabBarController控制器,它在请求自己的view时,会自动添加2个子视图,一个是我们非常熟悉的TabBar视图,另外一个就是UITransitionView。tabBar视图的作用不言而喻,切换视图控制器。而UITranstionView视图作用则是用来承载我们感兴趣的内容(间接的加载其他视图控制器的子视图)。也就是图2-1的中的紫色部分。因此,如果我们想控制自定义TabBar视图的高度(不在是固定的49),我们就需要拉长UITransitionView的高度,即让紫色的视图加长。那么,问题又来了,我们需要在遍历子视图时准确的找出UITransitionView,然后修改它的高度,这时,反射就派上用场了。代码如下所示:
      for (UIView *subview in self.view.subviews) {
      // NSClassFromString() -> 反射机制,通过指定类名
      Class class = NSClassFromString(@"UITransitionView");
      // 是否属于自该类
      if ([subview isMemberOfClass:class]) {
      // 将TransitionView对象高度增加9,
      // 自定义tabBar时视图时,高度就可以设置为40了
      subview.frame = CGRectMake(0, 0, 320, 519+9);
      }
      }

  • 相关阅读:
    登录注册测试用例
    礼盒抽奖测试点
    jmeter性能测试
    selenium的常用API及案例演示
    jmeter+ant+jenkins接口自动化测试框架
    开源性能测试工具jmeter
    Jmeter响应断言,性能测试,定时器,cookie
    Charles的介绍,配置与使用
    异常捕获以及文件的相关操作
    函数封装及面向对象
  • 原文地址:https://www.cnblogs.com/isItOk/p/5041176.html
Copyright © 2020-2023  润新知