日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

UIStackView嵌套的Label多行文字動(dòng)態(tài)高度

作者:humiaor 更新時(shí)間: 2022-07-21 編程語(yǔ)言

首先我們了解下UIStackView ,?UIStackView 其實(shí)是提供了一個(gè)接口用于平鋪一行或一列的視圖組合,繼承自UIView。就相當(dāng)于一個(gè)盒子,里面可以裝任何東西。我們只需要通過(guò)對(duì)stackView的axis,?distribution,?alignment,?spacing屬性進(jìn)行修改,就可以得到這個(gè)盒子的彈性伸縮。

-??axis(軸向) 屬性決定了 stack 的朝向,只有垂直或水平

-??distribution(分布) 屬性決定了其管理的視圖在沿著其軸向上的布局

-??alignment(對(duì)齊) 屬性決定了其管理的視圖在垂直于其軸向上的布局;

-??spacing(空隙) 屬性決定了其管理的視圖間的最小間隙;

其中?alignment(對(duì)齊)

Fill : 垂直方向上鋪滿
Top : 沿頂端對(duì)齊
Center : 沿中心線對(duì)其
Bottom : 沿底部對(duì)齊
First Baseline : 按照第一個(gè)子視圖的文字的第一行對(duì)齊,同時(shí)保證高度最大的子視圖底部對(duì)齊(只在axis為水平方向有效)
Last Baseline : 按照最后一個(gè)子視圖的文字的最后一行對(duì)齊,同時(shí)保證高度最大的子視圖頂部對(duì)齊(只在axis為水平方向有效)

其中distribution(分布)

? ? Fill : 鋪滿
? ? Fill Equal : 等寬鋪滿
? ? Fill Proportionally : 等比例鋪滿,需要給各子視圖設(shè)定一個(gè)寬度比或高度比
? ? Equal Spacing :等距離放置
? ? Equal Centering :各個(gè)試圖的中心距離保持一致,不夠放置則壓縮后面的試圖距離;

例如要實(shí)現(xiàn)下圖的效果

for (NSInteger i = 0; i < model.details.count; i++) {
                HDGoodsModel * goods = model.details[i];
                NSString * key = @"商品SKU";
                NSString * count = [NSString stringWithFormat:@"x%ld",(long)goods.count];
                SPLabel * leftLabel = [SPLabel label].sFont([UIFont systemFontOfSize:14]).sText(key).sTextColor([UIColor dk_colorWithHexString:@"#777C90"]).sNumberOfLines(1);
                if (i != 0) {
                    leftLabel.textColor = [UIColor clearColor];
                }
                SPLabel * middleLabel = [SPLabel label].sFont([UIFont systemFontOfSize:14]).sTextAlignment(NSTextAlignmentCenter).sTextColor([UIColor dk_colorWithHexString:@"#20284A"]).sText(goods.specifications).sNumberOfLines(0);
                SPLabel * rightLabel = [SPLabel label].sFont([UIFont systemFontOfSize:14]).sTextAlignment(NSTextAlignmentRight).sTextColor([UIColor dk_colorWithHexString:@"#20284A"]).sText(count).sNumberOfLines(1);
                
                UIStackView * stackView = [[UIStackView alloc] initWithArrangedSubviews:@[leftLabel,middleLabel,rightLabel]];
               //豎直方向以第一行文字為基準(zhǔn)線
               stackView.axis = UILayoutConstraintAxisHorizontal;
               stackView.alignment = UIStackViewAlignmentFirstBaseline;
                //橫向按等寬度排列
               stackView.distribution = UIStackViewDistributionFillProportionally;
               stackView.spacing = 0.0;
               stackView.backgroundColor = [UIColor clearColor];
                //設(shè)置中間的文字是左側(cè)文字的寬度的3.3倍
                [middleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
                    make.width.equalTo(leftLabel.mas_width).multipliedBy(3.3);
                }];
                //設(shè)置右側(cè)的文字是中間文字寬度的0.2
                [rightLabel mas_makeConstraints:^(MASConstraintMaker *make) {
                    make.width.equalTo(middleLabel.mas_width).multipliedBy(0.2);
                }];
                [self.stackView addArrangedSubview:stackView];
            }

?

原文鏈接:https://blog.csdn.net/humiaor/article/details/125898240

欄目分類
最近更新