iOS 之 冷门小知识


生命周期

1、-(void)loadView

  • 苹果建议:在loadView方法中,只是创建子视图控件,不设置位置,在viewWillLayoutSubviews方法中设置控件的位置

  • loadView方法中,通常不要调用[super loadView]如果调用父类方法默认会创建一个空视图
    注:如果重写了loadview,控制器只会加载loadview里的东西,就不会加载xib storyboard

  • 什么时候被调用?

    1. 每次访问UIViewController的view(比如controller.view)而且view为nil,loadView方法就会被调用。
    2. 它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view
    3. 如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件
    4. 如果没有明显地传xib文件名,就会加载跟UIViewController同名的xib文件
    5. 如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性,大致如下
      self.view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];
  • 怎样正确使用这个方法?

    • 如果想通过代码来创建UIViewController的view,就要重写loadView方法,并且不需要调用[super loadView],因为在第3点里面已经提到:若没有xib文件,[super loadView]默认会创建一个空白的UIView。我们既然要通过代码来自定义UIView,那么就没必要事先创建一个空白的UIView

2、+ (void)load

// 类一加载到内存时就会调用这个方法
+ (void)load {
}
+(void)initialize 和 + (void)load区别
  +(void)initialize: 类第一次被调用(或使用)的时候调用
  +(void)load: 类第一次装进内存的时候调用

load调用比initial时间更前



坐标转化

// 以c为坐标原点的b的fram,转换为在a中的frame
[a convertRect:b fromView:c];
// 以a为坐标原点的b的fram,转换为在c的fram
[a convertRect:b toView:c];

导航栏

  • (设置了UINavigationBar的translucent为NO) || (设置UINavigationBar的backgroundImage有alpha值的图片),则UINavigationBar的高斯控件会消失

  • UINavigationBar 的barTintColor属性

    • 高斯控件: 影响 高斯控件最后一个子控件的背景色
    • 高斯控件: 影响_UIBarBackground的背景色
  • UINavigationBar 的backgroundImage属性

    • 影响_UIBarBackground的子控件(UIImageView)的image属性
  • translucent属性(透明度)

    • iOS7 以后 translucent 默认为 YES,rootView 从(0,0)开始布局,修改edgesForExtendedLayout 属性可以改变布局;
    • translucent 为 NO,rootView 从导航栏底部开始布局,修改 edgesForExtendedLayout属性无法改变布局,可以通过设置 extendedLayoutIncludesOpaqueBars = YES 从(0,0)开始布局;
    • automaticallyAdjustsScrollViewInsets 默认值是 true,表示在全屏模式下会自动修改第一个添加到 rootView 的 scrollview 的 contentInset 为(64,0,0,0),用来纠正scrollview在全屏模式下的显示;
    • 设置 UINavigationBar 的背景图片可以改变导航栏背景色,如果背景图片包含 alpha 的色值,系统会默认将 translucent 设置为 true,没有包含 alpha 色值会将 translucent 设置为 false。但这是针对没有手动设置 translucent 值的情况,如果我们手动设置了 translucent,那么系统就不会根据背景图片的 alpha 来修改 translucent。

你可能感兴趣的:(iOS 之 冷门小知识)