• UIStackView嵌套的Label多行文字动态高度


    首先我们了解下UIStackView , UIStackView 其实是提供了一个接口用于平铺一行或一列的视图组合,继承自UIView。就相当于一个盒子,里面可以装任何东西。我们只需要通过对stackView的axisdistributionalignmentspacing属性进行修改,就可以得到这个盒子的弹性伸缩。

    -  axis(轴向) 属性决定了 stack 的朝向,只有垂直或水平

    -  distribution(分布) 属性决定了其管理的视图在沿着其轴向上的布局

    -  alignment(对齐) 属性决定了其管理的视图在垂直于其轴向上的布局;

    -  spacing(空隙) 属性决定了其管理的视图间的最小间隙;

    其中 alignment(对齐)

    Fill : 垂直方向上铺满
    Top : 沿顶端对齐
    Center : 沿中心线对其
    Bottom : 沿底部对齐
    First Baseline : 按照第一个子视图的文字的第一行对齐,同时保证高度最大的子视图底部对齐(只在axis为水平方向有效)
    Last Baseline : 按照最后一个子视图的文字的最后一行对齐,同时保证高度最大的子视图顶部对齐(只在axis为水平方向有效)

    其中distribution(分布)

        Fill : 铺满
        Fill Equal : 等宽铺满
        Fill Proportionally : 等比例铺满,需要给各子视图设定一个宽度比或高度比
        Equal Spacing :等距离放置
        Equal Centering :各个试图的中心距离保持一致,不够放置则压缩后面的试图距离;

    例如要实现下图的效果

    1. for (NSInteger i = 0; i < model.details.count; i++) {
    2. HDGoodsModel * goods = model.details[i];
    3. NSString * key = @"商品SKU";
    4. NSString * count = [NSString stringWithFormat:@"x%ld",(long)goods.count];
    5. SPLabel * leftLabel = [SPLabel label].sFont([UIFont systemFontOfSize:14]).sText(key).sTextColor([UIColor dk_colorWithHexString:@"#777C90"]).sNumberOfLines(1);
    6. if (i != 0) {
    7. leftLabel.textColor = [UIColor clearColor];
    8. }
    9. SPLabel * middleLabel = [SPLabel label].sFont([UIFont systemFontOfSize:14]).sTextAlignment(NSTextAlignmentCenter).sTextColor([UIColor dk_colorWithHexString:@"#20284A"]).sText(goods.specifications).sNumberOfLines(0);
    10. SPLabel * rightLabel = [SPLabel label].sFont([UIFont systemFontOfSize:14]).sTextAlignment(NSTextAlignmentRight).sTextColor([UIColor dk_colorWithHexString:@"#20284A"]).sText(count).sNumberOfLines(1);
    11. UIStackView * stackView = [[UIStackView alloc] initWithArrangedSubviews:@[leftLabel,middleLabel,rightLabel]];
    12. //竖直方向以第一行文字为基准线
    13. stackView.axis = UILayoutConstraintAxisHorizontal;
    14. stackView.alignment = UIStackViewAlignmentFirstBaseline;
    15. //横向按等宽度排列
    16. stackView.distribution = UIStackViewDistributionFillProportionally;
    17. stackView.spacing = 0.0;
    18. stackView.backgroundColor = [UIColor clearColor];
    19. //设置中间的文字是左侧文字的宽度的3.3倍
    20. [middleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
    21. make.width.equalTo(leftLabel.mas_width).multipliedBy(3.3);
    22. }];
    23. //设置右侧的文字是中间文字宽度的0.2
    24. [rightLabel mas_makeConstraints:^(MASConstraintMaker *make) {
    25. make.width.equalTo(middleLabel.mas_width).multipliedBy(0.2);
    26. }];
    27. [self.stackView addArrangedSubview:stackView];
    28. }

     

  • 相关阅读:
    【Git】常用命令大全
    三个本地组策略的设置实例
    音视频云架构
    优化开发人员对 K8s 安全的影响
    mysql查看正在执行的sql语句并将其kill掉
    顺序编码器--OrdinalEncoder类
    Java动态数组——ArrayList复习
    外呼系统和呼叫中心系统的优势和特点
    基于PHP的图书管理系统的设计与实现
    【Java面试】离谱!面试官竟想用分布式和微服务干掉大批面试者,结果遇到面试八股文大师后......
  • 原文地址:https://blog.csdn.net/humiaor/article/details/125898240