iOS动态控制子视图按钮的显示与隐藏 (Masonry版本)

3,474 阅读2分钟

「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」。

引言

应用场景:

  1. 下级订货单不展示政策信息
  2. 上下级订货清单展示不同的子视图

本级的订货清单不显示分配终端按钮子视图

下级代理商的订货清单显示分配终端按钮子视图

  1. 入库单详情界面未审核状态时展示审核按钮,否则隐藏审核按钮)

I 使用MASConstraint的安装与移除进行动态控制

具体使用方法: 1.定义 MASConstraint 属性 2.存储MASConstraint 属性 3. 根据特定条件进行移除和卸载特定的约束

1.1 下级订货单不展示政策信息

利用MASConstraint的安装与移除

    [self.noLab mas_updateConstraints:^(MASConstraintMaker *make) {
       self.makeheight4noLab =  make.height.mas_equalTo(kAdjustRatio(0));
    }];
    
    
    if(models.isLowerOrder){//下级不展示 政策信息
        [self.makeheight4noLab install];

    }else{
        [self.makeheight4noLab uninstall];


    }

1.2 入库单详情界面未审核状态展示审核按钮,否则隐藏。

  • 前后效果对比

具体使用方法:

1.1 定义 MASConstraint 属性

1.2 存储MASConstraint 属性

1.3 根据使用包含特定字段models.tradeNo进行移除和卸载特定的约束

  • 定义 MASConstraint 属性

/**
 用于图片底部约束的移除与安装
 */
@property MASConstraint *makebottomequalToWeakSelf4imgV;



  • 存储MASConstraint 属性
    __weak __typeof__(self) weakSelf = self;
    
    [self.imgV mas_updateConstraints:^(MASConstraintMaker *make) {
        self.makebottomequalToWeakSelf4imgV = make.bottom.equalTo(weakSelf).offset(-kAdjustRatio(14));
        
        
        
    }];

  • 根据使用包含特定字段models.tradeNo进行移除和卸载特定的约束
        if(!weakSelf.viewModel.isShowBottomBtn){
            [self.makebottomequalToWeakSelf4TV install];

        }else{
            [self.makebottomequalToWeakSelf4TV uninstall];

            
        }


II 更新视图的高度约束来动态控制子视图按钮的显示与隐藏

需求: 动态控制子视图按钮的显示与隐藏

例子:本级的订货清单不显示分配终端按钮子视图 下级代理商的订货清单显示分配终端按钮子视图

根据模型的上下级类型控制视图的高度的约束,进而控制视图地显示与隐藏 在这里插入图片描述

在这里插入图片描述

  • 定义分配终端按钮属性
/**
 分配终端按钮
 */
@property (strong, nonatomic) QCTStoreOrderButton *allocationBtn;

- (QCTStoreOrderButton *)allocationBtn{
    if (!_allocationBtn) {
        
        QCTStoreOrderButton *tmp = [[QCTStoreOrderButton alloc]init];

        _allocationBtn = tmp;
        

        [tmp setTitle:QCTLocal(@"分配终端") forState:UIControlStateNormal];
        
        
        
        __weak __typeof__(self) weakSelf = self;

        [self addSubview:tmp];
        
        [tmp mas_makeConstraints:^(MASConstraintMaker *make) {
            
            
            
            make.height.mas_equalTo(kAdjustRatio(25));
            make.width.mas_greaterThanOrEqualTo(kAdjustRatio(70));

            
            make.right.equalTo(weakSelf).offset(-kAdjustRatio(kSideMargin));
            
            make.top.equalTo(weakSelf.quantityAllottedLab.mas_bottom).offset(kAdjustRatio(6));
            
            
            
                        make.bottom.equalTo(weakSelf).offset(-kAdjustRatio(13));
            

            //            make.size.mas_equalTo(CGSizeMake(kAdjustRatio(74), kAdjustRatio(28)));

            
        }];
        [tmp.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.offset(kAdjustRatio(3));
            make.right.offset(kAdjustRatio(-3));


        }];
        
        tmp.titleLabel.textAlignment = NSTextAlignmentCenter;
        
        
    }
    return _allocationBtn;
}



  • 根据模型的上下级类型控制视图的高度的约束,进而控制视图地显示与隐藏
    __weak __typeof__(self) weakSelf = self;

    [self.allocationBtn mas_updateConstraints:^(MASConstraintMaker *make) {
        
        
        if(!models.isLowerOrder){//  "isLowerOrder" : "false", 本级
            

            
            
            make.top.equalTo(weakSelf.quantityAllottedLab.mas_bottom).offset(kAdjustRatio(0));
            

            make.height.mas_equalTo(kAdjustRatio(0));
            
            
        }else{// 下级
            make.top.equalTo(weakSelf.quantityAllottedLab.mas_bottom).offset(kAdjustRatio(6));
            

            make.height.mas_equalTo(kAdjustRatio(30));

            
        }

        
        
        
    }];
    

see also

由于篇幅原因,更多内容请关注 #小程序:iOS逆向,只为你呈现有价值的信息,专注于移动端技术研究领域;更多服务和咨询请关注#公众号:iOS逆向。