zoukankan      html  css  js  c++  java
  • 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);
      }
      }

  • 相关阅读:
    leetcode33. Search in Rotated Sorted Array
    pycharm 设置sublime text3 monokai主题
    django class Meta
    leetcode30, Substring With Concatenation Of All Words
    Sublime text3修改tab键为缩进为四个空格,
    sublime text3 python打开图像的问题
    安装上imesupport输入法依然不跟随的解决办法,
    sublime text3 的插件冲突弃用问题,
    sublime text3 BracketHighlighter括号匹配的设置
    windows 下wget的使用
  • 原文地址:https://www.cnblogs.com/isItOk/p/5041176.html
Copyright © 2011-2022 走看看