iOS 如何使用Masonry根据子视图size改变父视图size(MBProgressHUD)

热门标签

,

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

iOS 如何使用Masonry根据子视图size改变父视图size(MBProgressHUD)

最近需要做一个近似于MBProgressHUD功能的一个控件,于是就仔细看了看MBProgressHUD的源码。总的来说,它的重点在于HUD初始化、show、hide方法,以及视图的处理方式,但是难点个人认为在于autolayout。它是用系统的约束布局,看起来比较苦涩难懂,除非对系统约束比较熟悉。

现在大多数项目的布局都是用的第三方布局工具Masonry,我个人也是相对用的比较顺手,重要的是我对系统布局没什么研究,所以在封装控件的时候就用的Masonry。

如何使用Masonry根据子视图size改变父视图size是这篇文章要解决的问题

如上图,我想在红色的bgView上放两个UILabel(label、detailLabel),bgView最大width是它的左右边缘距离父视图左右边缘都是20px;两个label的最大width是它的左右边缘距离父视图左右边缘都是10px;bgView的最小size是400px*400px。

直接上代码吧,仔细想想就可以理解为什么要这样做:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    [self.view addSubview:self.bgView];
    [self.bgView addSubview:self.label];
    [self.bgView addSubview:self.detailLabel];
    
    [_label mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.bgView);
        make.height.mas_equalTo(40);
        make.width.lessThanOrEqualTo(self.bgView).mas_offset(-10);
    }];
    
    [_detailLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerX.equalTo(self.bgView);
        make.top.mas_equalTo(_label.mas_bottom).mas_offset(10);
        make.height.mas_equalTo(40);
        make.width.lessThanOrEqualTo(self.bgView).mas_offset(-10);
    }];
    
    [_bgView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.view);
        make.height.mas_equalTo(200);
        make.width.mas_equalTo(200).priorityLow();
        make.width.lessThanOrEqualTo(self.view).mas_offset(-20);
    }];
    
}

- (UIView *)bgView {
    if (!_bgView) {
        _bgView = [[UIView alloc] init];
        _bgView.backgroundColor = [UIColor redColor];
    }
    return _bgView;
}

- (UILabel *)label {
    if (!_label) {
        _label = [[UILabel alloc] init];
        _label.textAlignment = NSTextAlignmentCenter;
        _label.text = @"[UIColor brownColor]";
        _label.backgroundColor = [UIColor brownColor];
    }
    return _label;
}

- (UILabel *)detailLabel {
    if (!_detailLabel) {
        _detailLabel = [[UILabel alloc] init];
        _detailLabel.textAlignment = NSTextAlignmentCenter;
        _detailLabel.text = @"这是detailLabelMBProgressHUDMBProgressHUD";
        _detailLabel.backgroundColor = [UIColor brownColor];
    }
    return _detailLabel;
}

这只是一个例子,举一反三适用于很多场景。

标签:

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术Dog|博客
原文地址:《iOS 如何使用Masonry根据子视图size改变父视图size(MBProgressHUD)》 发布于2019-10-15

分享到:
赞(0)

评论 抢沙发

7 + 1 =


iOS 如何使用Masonry根据子视图size改变父视图size(MBProgressHUD)

长按图片转发给朋友

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录