美文网首页iOSiOS开发-自动布局
masonry使用、介绍和获取自动布局后的高度

masonry使用、介绍和获取自动布局后的高度

作者: admxjx | 来源:发表于2016-03-23 10:11 被阅读6905次

    很多时候会用到自动布局,例:分类标签、搜索页面中的热门搜索等等。
    所以,简单的介绍一下:
    1.masonry的自动布局
    2.获取自动布局后的高度

    masonry的自动布局

    // footerView 是之前创建的View
    [footerView addSubview:self.tagView];
    
    // 自动布局 self.tagView
    [self.tagView mas_makeConstraints: ^(MASConstraintMaker *make) {
        // self.tagView的获取父视图
        UIView *superView = footerView;
        // 设置宽度为父视图的宽度-50 等价于(self.tagView.frame.size.width = footerView.frame.size.width - 50);
        make.width.equalTo(superView.mas_width).with.offset(-50);
        // 设置X为父视图的X+50 等价于(self.tagView.frame.origin.x = footerView.frame.origin.x + 54;);
        make.top.equalTo(superView.mas_top).with.offset(54);
        // 左距离
        make.left.equalTo(superView.mas_left).with.offset(25);
        make.leading.equalTo(superView.mas_leading).with.offset(0);
        make.trailing.equalTo(superView.mas_trailing);
        DLog(@"___%@",@(self.tagView.height))
    }];
    

    获取自动布局后的高度

    调用self.tagView父视图的 layoutIfNeeded 后可以获取高度
    layoutIfNeeded
    如果,有需要刷新的标记,立即调用layoutSubviews进行布局

    [footerView layoutIfNeeded];     // 下面会有关于layoutIfNeeded的介绍
    CGFloat tagViewHeight = self.tagView.height;
    

    关于UIView的布局的方法
    layoutSubviews
    layoutIfNeeded
    setNeedsLayout
    setNeedsDisplay
    drawRect
    sizeThatFits
    sizeToFit
    http://www.jianshu.com/p/bfa45eb4c4ba

    之前在看资料的时候有发些人调用以下这个方法获取self.tagView的height

    [self.tagView layoutIfNeeded];
    CGFloat height = [self.tagView systemLayoutSizeFittingSize:
    UILayoutFittingCompressedSize].height;

    本人在模拟器中调用此方法能获取到self.tagView的高度,但在真机调试中失败了。

    Masonry中的一些常用属性

    // 左侧
    @property (nonatomic, strong, readonly) MASConstraint *left;
    // 顶部
    @property (nonatomic, strong, readonly) MASConstraint *top;
    // 右侧
    @property (nonatomic, strong, readonly) MASConstraint *right;
    // 底部
    @property (nonatomic, strong, readonly) MASConstraint *bottom;
    // 首部
    @property (nonatomic, strong, readonly) MASConstraint *leading;
    // 尾部
    @property (nonatomic, strong, readonly) MASConstraint *trailing;
    // 宽
    @property (nonatomic, strong, readonly) MASConstraint *width;
    // 高
    @property (nonatomic, strong, readonly) MASConstraint *height;
    // 中心点x
    @property (nonatomic, strong, readonly) MASConstraint *centerX;
    // 中心点y
    @property (nonatomic, strong, readonly) MASConstraint *centerY;
    // 文本基线
    @property (nonatomic, strong, readonly) MASConstraint *baseline;

    // 居中显示视图
    UIView *myView = [[UIView alloc] init];
    myView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:myView];

    [myView mas_makeConstraints:^(MASConstraintMaker *make) {
    // 设置当前center和父视图的center一样
    make.center.mas_equalTo(self.view);
    // 设置当前视图的大小
    make.size.mas_equalTo(CGSizeMake(300, 300));
    }];

    本人QQ:1103868202... 新建QQ群:398369031

    欢迎来讨论交流技术。

    PS:(现就职于杭州梦想小镇. 蓝麦电商 )

    相关文章

      网友评论

      • 小桥流水青山碧海:先创建一个scrollview 添加self.view 添加scrollview 在scrollview里面用masonry布局,现在要设置myScrollView.contentSize 获取不到最后一控件的frame 无法设置,用你们的方法 两个都不行
      • feng_dev:哈哈哈我也是用的tag view ,thanks !
      • 奋斗的小黄鸟:CGFloat height = [self.tagView systemLayoutSizeFittingSize:
        UILayoutFittingCompressedSize].height; 没毛病 我的真机可以的
        奋斗的小黄鸟:@小桥流水青山碧海先调用layout方法
        小桥流水青山碧海:我用这个真机获取不到height
      • 属鱼的加菲猫:兄弟,你完蛋了,我要到梦想小镇狙击你
        属鱼的加菲猫:@属鱼的加菲猫 你文章中说的获取高度,有必要那么麻烦吗??
        属鱼的加菲猫:@admxjx 我在海床科技中心
        admxjx:@属鱼的加菲猫 请开始你的表演

      本文标题:masonry使用、介绍和获取自动布局后的高度

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