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

  1. 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)];

以上即可

上一篇下一篇

猜你喜欢

热点阅读