iOS 自定义view xib布局layout约束

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

以上即可

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容