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。