iOS 自定义view xib布局layout约束
2018-08-03 本文已影响15人
yezi1989
1.创建UIView 的SubClass 命名为MainHeaderView
2.创建一个名为MainHeaderView的xib
3.配置xib的属性
image.png
4.设置xib中的File’s owner = MainHeaderView, 拖拽view 到关联的代码中命名为contentView
5.对ViewController 初始化MainHeaderView
-
MainHeaderView.m中添加代码
- (void)awakeFromNib
{
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.contentView];
}
7.这样执行后就可以看到该View了,但是会有一个严重的问题,那就是MainHeaderView 在显示时没有做到AutoLayout。仅仅是按照xib中的尺寸来显示,而在实际应用中可能我们会期待在ViewController中使用的自定义View内部亦可以自动匹配大小。
对于上面的问题,我的解决方法是重写setFrame方法,如下:
8、MainHeaderView.m中添加代码
- (void)setFrame:(CGRect)frame
{
[super setFrame:frame];
CGRect rect = frame;
rect.origin.x = 0;
rect.origin.y = 0;
self.contentView.frame = rect;
}
MainHeaderView中代码如下:
- (void)setFrame:(CGRect)frame
{
[super setFrame:frame];
CGRect rect = frame;
rect.origin.x = 0;
rect.origin.y = 0;
self.m_ContentView.frame = rect;
}
- (void)awakeFromNib
{
[super awakeFromNib];
[self initial];
}
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
self.frame = frame;
[self initial];
}
return self;
}
- (void)initial
{
[[NSBundle mainBundle] loadNibNamed:@"MainHeaderView" owner:self options:nil];
[self addSubview:self.m_ContentView];
}
9.viewcontroller中实现
self.s_HeadView = [[MainHeaderView alloc] init];
[self.s_HeadView setFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, 160)];
以上即可