UITableView根据表格内容进行高度自适应与使用Masonry实现根据内容进行宽度自适应和高度自适应

这篇具有很好参考价值的文章主要介绍了UITableView根据表格内容进行高度自适应与使用Masonry实现根据内容进行宽度自适应和高度自适应。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Masonry和SDAutoLayout不同:SDAutoLayout需要上下左右四个方向都显示性的进行约束,虽然当高度和宽度自适应时,可以少一个高度约束,但是也应有对应布局处理设置。因为标签是有顶部和底部空白间隙的,通常高度比字体大小大一些(当字体很大时的粗体差别很大),当设置的高度比标签实际高度小时,标签的顶部和底部被截取。当然它也有好处,就是严格按照布局高度实现ui.而Masonry并非上下左右四个方向都设置约束,一般2到3个不重复方向的约束就可以(没有就采用默认值推导)。就是设置上下左右的约束,它实际的标签也是按照标签的实际显示高度上下留空白,这样就造成和UI有稍微一点高度的偏差。可见他们各有优缺点,一般场景可以混用,带自适应高度的布局场景不能混用。
Masonry的自适应宽度和高度大致可以分为三类情况。
第一种情况:控件根据内容进行宽度自适应(就是省略左或右方向的一个约束):
[self.describeTitleLabel mas_makeConstraints:^(MASConstraintMaker make) {
make.left.mas_equalTo(COMMON_BIG_EDGE_DISTANCE);
// make.width.mas_equalTo(FULL_WIDTH-COMMON_EDGE_DISTANCE
2);
make.top.mas_equalTo(68+height+8);
make.height.mas_equalTo(16.0);
}];

当然若你的控件是先加载控件,后填入内容就需要在重置内容后对控件进行重新布局:
[self.describeTitleLabel mas_updateConstraints:^(MASConstraintMaker make) {
make.left.mas_equalTo(COMMON_BIG_EDGE_DISTANCE);
// make.width.mas_equalTo(FULL_WIDTH-COMMON_EDGE_DISTANCE
2);
make.top.mas_equalTo(68+height+8);
make.height.mas_equalTo(16.0);
}];
注意:Masonry是延迟布局生效,不是你刚调用mas_makeConstraints或mas_updateConstraints对控件进行布局后立即填充内容,它的宽度就是刚布局时的宽度。但是若控件已经加载出来,等大约1秒后你再对它赋值,那么你不对它重新布局,那么它显示的就是最开始的宽度。高度自适应也是如此。
第二种情况:非表格控件根据内容进行高度自适应(就是省略上或下方向的一个约束):
[content mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(COMMON_BIG_EDGE_DISTANCE);
make.right.mas_equalTo(-COMMON_BIG_EDGE_DISTANCE);
make.top.mas_equalTo(68.0);
}];

第三种情况:表格控件根据内容进行高度自适应,不但要对控件进行最大预计宽度设置(contentLab.preferredMaxLayoutWidth = SCREEN_WIDTH - BaseSize(43);),还要对表格高度进行自适应(不能有height约束),对表格高度设置为高度自适应的值(UITableViewAutomaticDimension)。
表格加载代码:

  • (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    return UITableViewAutomaticDimension;
    }
    表格控件布局函数部分代码:
    #import “MessageTableViewCell.h”

@implementation MessageTableViewCell

  • (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code
    }

  • (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
    }

  • (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
    [self initCell];
    self.selectionStyle = UITableViewCellSelectionStyleNone;

    }
    return self;
    }

  • (void)initCell{
    UILabel* contentLab = [UILabel labelWithText:@“ttttttttttttttttttttttt” font:SystemFontOfSize(14) textColor:TextBlackColor];
    contentLab.preferredMaxLayoutWidth = SCREEN_WIDTH - BaseSize(43);
    contentLab.numberOfLines = 0;
    contentLab.textAlignment = 0;
    [self.contentView addSubview:contentLab];
    self.contentLab = contentLab;

    [contentLab mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.mas_equalTo(BaseSize(12)).;
    make.left.mas_equalTo(BaseSize(17));
    make.right.mas_equalTo(BaseSize(-26));
    make.bottom.mas_equalTo(-BaseSize(23.5));

    }];
    }

  • (void)setMsg:(MessageModel *)msg {
    _msg = msg;
    self.contentLab.text = msg.Title;
    }

@end
其中最核心的代码是:

contentLab.preferredMaxLayoutWidth = SCREEN_WIDTH - BaseSize(43);
contentLab.preferredMaxLayoutWidth = SCREEN_WIDTH - BaseSize(43);
    [contentLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(BaseSize(12)).;
        make.left.mas_equalTo(BaseSize(17));
        make.right.mas_equalTo(BaseSize(-26));
        make.bottom.mas_equalTo(-BaseSize(23.5));
        
    }];

注意:若你是立即对表格赋值或赋值后局部更新,需要更新布局使用下面的代码:

- (void)setMsg:(MessageModel *)msg {
    _msg = msg;
    self.contentLab.text = msg.Title;
    [self.contentLab mas_updateConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(BaseSize(12)).;
        make.left.mas_equalTo(BaseSize(17));
        make.right.mas_equalTo(BaseSize(-26));
        make.bottom.mas_equalTo(-BaseSize(23.5));
    }];
}

另外在UILabel自适应高度的同时,也可以对UILabel显示的最大行数进行限制,代码如下:

[self.productNameLabel setMaxNumberOfLinesToShow:2];

实现自适应高度和宽度见《自适应高度的表格UICollectionView》和《使用SDAutoLayout实现控件根据内容进行宽度自适应和高度自适应》。文章来源地址https://www.toymoban.com/news/detail-424928.html

到了这里,关于UITableView根据表格内容进行高度自适应与使用Masonry实现根据内容进行宽度自适应和高度自适应的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Element UI的表格高度自适应。

    在开发后台管理系统的时候,我们的main区域有时会因为表格的高度固定导致不同分辨率情况下展示不同,低分辨率情况下会出现整体竖向滚动条。 element ui的表格有height属性,但是他是固定的,不会随着分辨率不同进行自适应。低分辨率可能会出现滚动条。 可以将element ui

    2024年02月12日
    浏览(37)
  • Qt QTableWidget 表格自适应 高度和宽度

    1. 在MainWindow中设置 1.1. 对被嵌入的子窗口进行设置,去除子窗口的一些影响到嵌入的部件。 pTable:指向子窗口堆内存的指针 1.2. 设置子窗口可以跟随主窗口自适应变化宽度。 水平方向:子窗口的自适应缩放。也可以直接在设计师中完成。 2. 在QTableWidget ui表格的 cpp文件中设

    2023年04月21日
    浏览(80)
  • uniapp根据高度表格合并

    没有发现比较友好的能够合并表格单元格插件就自己简单写了一个,暂时格式比较固定 一、效果如下 二、UI视图+逻辑代码

    2024年02月14日
    浏览(48)
  • element-ui 表格如何自适应高度

    1、 el-table 增加 max-height 属性 2、 data 增加 tableHeight 变量 3、 mounted 获取计算高度,每次需要刷新页面才能自适应 虽然这时候,已经可以根据窗体大小,高度动态变化,但是,还要每次刷新才行…… 所以,我们需要加一个监听器即可,监听窗体大小变化,一旦变化就执行方法

    2024年02月11日
    浏览(38)
  • textarea 内容自适应,高度向上扩展

    监听 textarea 的 input 事件的 scrollHeight 变化(scrollHeight 元素内容高度),赋值给 height。 再给 textarea 设置最大最小高度,padding 为 0(它自身的),保证上下限。

    2024年02月03日
    浏览(54)
  • Element UI 中的Table表格组件自定义行高与整个表格自适应高度

    1、:header-row-style=\\\"{height:\\\'30px\\\'}\\\" 设置表格列标题的高度为30像素。 2、:header-cell-style=\\\"{background:\\\'#f5f7fa\\\',padding:\\\'0px\\\'}\\\" 设置表格列标题的背景颜色。 3、:row-style=\\\"{height:\\\'30px\\\'}\\\" 设置每行的高度为30像素。 4、height=\\\"calc(100vh - 150px)\\\" 设置整个表格的高度。因为要自适应所以这个高度要用

    2024年02月12日
    浏览(49)
  • html+css+Jquery 实现 文本域 文字数量限制、根据输入字数自适应高度

    先看效果:初始的效果,样式多少有点问题,不重要!重要的是功能! 输入后: 根据文字长度,决定文本域长度 + 限制文字数量 1 .样式请自行调整! 2 .此处代码为了方便测试,使用的是线上的jquery地址,使用时,请更换自己的路径地址!

    2024年02月02日
    浏览(54)
  • css自适应高度或宽度,超出内容显示滚动条

    有时候项目中使用了flex布局,高度或是宽度是自动填满剩余空间,不是具体的数值的时候,想要设置区域滚动条,可采用以下方法设置:

    2024年02月13日
    浏览(45)
  • 1 请使用js、css、html技术实现以下页面,表格内容根据查询条件动态变化。

            注意:         1.背景颜色用ppt的取色器来获取:                 先点击ppt的形状轮廓,然后点击取色器,吸颜色,然后再点击形状轮廓的其他轮廓颜色,即可获取到对应颜色。           2.表格间的灰色线是在th和td中用border属性设置的;         3.在js中拼

    2024年02月16日
    浏览(46)
  • css、js(vue)进行textarea自适应高度(超详细说明)

    黑色部分——页面布局为上左右下布局 红色部分——在右边有一个文本域,自适应高度,最小高度128px,最大高度不能超过右边屏幕的一半,里面有一个距离右下16px的确认按钮 效果如下图 问题1: 会导致有多余留白 问题2:超出限制的高度也不会出现滚动条(由问题1延申而

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包