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


    1,创建UIView 的SubClass 命名为MyView

     

    2, new一个名为MyView的xib

    p1p1

    3,配置xib的属性

    p2p2

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

    p3p3

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

    p4p4

    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 = 0;
    
        rect.origin.y = 0;
    
     
    
        self.contentView.frame = rect;
    
    }

    StoryBoard中拖拽MyView IBOutLet到 ViewController

    p5p5

    ViewDidLoad 中增加代码   

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

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

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

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

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

  • 相关阅读:
    随机图片
    单页网站
    最安全的聊天工具——Cryptocat
    一个游戏——小黑屋
    SAO Utils – SAO风格启动菜单
    对话框实现
    抖动文字
    Leetcode: 22. Generate Parentheses
    Leetcode: 21. Merge Two Sorted Lists
    Leetcode: 20. Valid Parentheses
  • 原文地址:https://www.cnblogs.com/mafeng/p/5768684.html
Copyright © 2020-2023  润新知