UINib

  • 继承自NSObject
  • xib最终会转变成nib文件

Xib和storyboard对比

  1. 共同点:
    1. 都用来描述软件界面
    • 都用Interface Builder工具来编辑
    • 本质都是转换成代码去创建控件
      • 包括创建控件,加入视图中,设置frame等基本属性,拖线等功能
  • 不同点
    1. Xib是轻量级的,用来描述局部的UI界面
    • Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系

xib加载控件

  1. 方法一:loadNibNamed
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil options:nil]
  • 方法二:instantiateWithOwner
    // bundleOrNil若为nil,则默认是mainBundle
    // 释放资源以应对内存压力(如内存警告),在必要时重新加载。
    UINib *nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];
    
    NSArray *views = [nib instantiateWithOwner:nil options:nil];
    
  • 注意:上述方式取出的都是xib中控件数组,需要根据角标获取对应控件
    1. [views firstObject],取出数组中的第一个元素,加载后的xib取出的是整个父控件。
    2. [views lastObject],取出数组中的最后一个元素,加载后的xib若只有一个父控件(子控件不算),也能取出父控件,否则不是取出父控件。

xib加载控制器

自动拉伸问题

  1. 从xib中加载进来的控件的autoresizingMask属性值默认是
    UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
    
  • 如果一个控件显示出来的大小和当初设置的frame大小不一致,有可能是因为autoresizingMask默认属性值影响,解决方案是设置该属性为空:
    view.autoresizingMask = UIViewAutoresizingNone;
    

UINib的其他方法

// bundleOrNil若为nil,则默认是mainBundle
+ (UINib *)nibWithData:(NSData *)data bundle:(nullable NSBundle *)bundleOrNil;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容