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;
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容