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

1,创建UIView 的SubClass 命名为MyView

2, new一个名为MyView的xib

p1iOS中 xib自定义View在storyboard中的使用

3,配置xib的属性

p2iOS中 xib自定义View在storyboard中的使用

4,为View 添加背景色,添加一个按钮并定制按钮约束,这里我添加的约束为垂直居中,Button与View等宽,Button左边起点位置为0。

p3iOS中 xib自定义View在storyboard中的使用

5,设置xib中的File’s owner = MyView, 拖拽view 到关联的代码中命名为contentView

p4iOS中 xib自定义View在storyboard中的使用

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 = ;

    rect.origin.y = ;

    self.contentView.frame = rect;

}

StoryBoard中拖拽MyView IBOutLet到 ViewController中

p5iOS中 xib自定义View在storyboard中的使用

ViewDidLoad 中增加代码

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

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

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

要是这样的话, 就要在tableviewCell的代码中的写:

// 如果有尺寸之类的要在该方法中写
- (void)layoutSubviews {
[super layoutSubviews];
// 让自定义view中的尺寸适应sb中的约束
[self.myView setFrame:self.myView.frame];
}

这样就可以让storyBoard 中设置的约束正确的影响到MyView。

上一篇:Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法


下一篇:foreach —(遍历数组或循环中的字符,以获取信息)