iOS中 xib自定義View在storyboard中的使用


1,創建UIView 的SubClass 命名為MyView

 

2, new一個名為MyView的xib

p1p1

3,配置xib的屬性

p2p2

4,為View 添加背景色,添加一個按鈕並定制按鈕約束,這里我添加的約束為垂直居中,Button與View等寬,Button左邊起點位置為0。

p3p3

5,設置xib中的File’s owner = MyView, 拖拽view 到關聯的代碼中命名為contentView

p4p4

6, 在storyboard 中對ViewController 添加一個View,之后把View 的class 設為MyView

 

7,MyView.m中添加代碼

 

- (void)awakeFromNib

{

    NSLog(@"awake from nib");

    [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];

    [self addSubview:self.contentView];

}

 

這樣執行后就可以看到該View了,但是會有一個嚴重的問題,那就是MyView 在顯示時沒有做到AutoLayout。僅僅是按照xib中的尺寸來顯示,而在實際應用中可能我們會期待在ViewController中使用的自定義View內部亦可以自動匹配大小。

對於上面的問題,我的解決方法是重寫setFrame方法,如下:

8,MyView.m中添加代碼

 

- (void)setFrame:(CGRect)frame

{

    [super setFrame:frame];

    CGRect rect = frame;

    rect.origin.x = 0;

    rect.origin.y = 0;

 

    self.contentView.frame = rect;

}

 

StoryBoard中拖拽MyView IBOutLet到 ViewController

p5p5

ViewDidLoad 中增加代碼   

 [self.myView setFrame:self.myView.frame];

如果你的自定view釋放到了tableviewCell上面, 如圖:

要是這樣的話, 就要在tableviewCell的代碼中的寫:

// 如果有尺寸之類的要在該方法中寫
- (void)layoutSubviews {
    [super layoutSubviews];
    // 讓自定義view中的尺寸適應sb中的約束
      [self.myView setFrame:self.myView.frame];
}

這樣就可以讓storyBoard 中設置的約束正確的影響到MyView。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM