iOS中 xib自訂View在storyboard中的使用

來源:互聯網
上載者:User

標籤:

1,建立UIView 的SubClass 命名為MyView

 

2, new一個名為MyView的xib

p1

3,配置xib的屬性

p2

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

p3

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

p4

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中

p5

ViewDidLoad 中增加代碼   

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

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

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

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

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

iOS中 xib自訂View在storyboard中的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.