美文网首页
iOS 自定义view xib布局layout约束

iOS 自定义view xib布局layout约束

作者: yezi1989 | 来源:发表于2018-08-03 11:28 被阅读15次

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

    以上即可

    相关文章

      网友评论

          本文标题:iOS 自定义view xib布局layout约束

          本文链接:https://www.haomeiwen.com/subject/qpdyvftx.html