zoukankan      html  css  js  c++  java
  • textView放在自定义cell里面-自适应高度

    首先我讲讲我做的这个自定义cell,像箭头部分这个label是共有的东西,展示的是一样的,所以我弄了一个父类cell,根据右边所需的不同展示方法,利用继承来实现

    在父类的layoutsuviews做约束的时候

      [self.fieldnameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            
            make.left.offset(10);
            make.centerY.equalTo(self);
        
        }];

    标题label上下是居中于cell,与cell左边有10边距  然后我有个该cell的子类

    - (void)layoutSubviews

    {

        [super layoutSubviews];

        [self.valueOptionTextView mas_makeConstraints:^(MASConstraintMaker *make) {

            make.left.equalTo(self.fieldnameLabel.mas_right).offset(10);

            make.right.equalTo(self.uonLabel.mas_left).offset(-10);

            make.top.equalTo(self.contentView.mas_top).offset(10);

            make.bottom.equalTo(self.contentView.mas_bottom).offset(-10);

            

        }];

    }

    valueOptionTextView 是子类增加的一个值数据textView  这个textView点击的时候会弹出一个选项框,选择对应的值,,然后显示在textView上面,但是出现
    valueOptionTextView的值要是过长达到换行的长度,就会出现挡住标题label的情况

    在初始化子类cell的时候我调用了[self layoutIfNeeded]  发现没有用, 找了好久好久终于发现,要在父类cell里面的初始化cell方法里面调用  [self layoutIfNeeded]   

    哦哦哦,差点讲偏题了,我这次要讲的是让cell自适应文本框高度....  接下来开始讲重点 :  

    1,textView有个属性 scrollEnabled  要设置为NO;

    2,设置tableview的时候  添加这两行代码:

        self.tableView.rowHeight = UITableViewAutomaticDimension;

        self.tableView.estimatedRowHeight = 100;

    3,textView的底部要和contentView底部有个约束

    初始化cell

    @implementation TemplateRichtextCell
    
    - (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier
    {
        if (self = [super initWithReuseIdentifier:reuseIdentifier]) {
            
            UITextView *valueTextView = [[UITextView alloc]init];
            valueTextView.scrollEnabled = NO;
            valueTextView.textAlignment = NSTextAlignmentRight;
            valueTextView.textColor = [UIColor darkGrayColor];
            valueTextView.font = [UIFont systemFontOfSize:15];
            [self.contentView addSubview:valueTextView];
            self.valueTextView = valueTextView;
            self.valueTextView.delegate = self;
            
        }
        
        return self;
        
    }

    控件布局约束

    - (void)layoutSubviews
    {
        [super layoutSubviews];
        [self.valueTextView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.fieldnameLabel.mas_right).offset(10);
            make.right.equalTo(self.uonLabel.mas_left).offset(-10);
            make.top.equalTo(self.contentView.mas_top).offset(10);
            make.bottom.equalTo(self.contentView.mas_bottom).offset(-10);
            
        }];
    }

    要实现动态输入文字让cell随时更改高度 要用tableView beginUpdates和endUpdates两方法进行刷新,那么要什么时候进行刷新呢?要达到实时,所以我想到

    textViewDidChange代理方法,这个会在文字改变的时候一直调用,所以在这个代理方法里面进行刷新是最合适不过的了,那么,我们又怎么能拿到tableView来进行调用更新呢?

    其实我们可以用while循环查找cell的父控件来找到tableView  所以喽,就是这样:

    - (void)textViewDidChange:(UITextView *)textView
    {
        CGRect bounds = textView.bounds;
    //     计算 text view 的高度
        CGSize maxSize = CGSizeMake(bounds.size.width, CGFLOAT_MAX);
        CGSize newSize = [textView sizeThatFits:maxSize];
        bounds.size = newSize;
        textView.bounds = bounds;
        // 让 table view 重新计算高度
        UITableView *tableView = [self tableView];
        [tableView beginUpdates];
        [tableView endUpdates];
    }
    - (UITableView *)tableView
    {
        UIView *tableView = self.superview;
        while (![tableView isKindOfClass:[UITableView class]] && tableView) {
            tableView = tableView.superview;
        }
        return (UITableView *)tableView;
    }

    到此,完成自适应;

  • 相关阅读:
    【开源】使用Angular9和TypeScript开发RPG游戏
    [开源]开放域实体抽取泛用工具 NetCore2.1
    【开源】C#信息抽取系统【招募C#队友】
    自然语言处理真实项目实战(20170830)
    自然语言处理真实项目实战(20170822)
    智慧航空AI大赛-阿里云算法大赛总结 第一赛季总结
    iOS11和机器学习CoreML库
    [不定期更新长文]卷积神经网络工作原理研究
    微服务SpringCloud之GateWay熔断、限流、重试
    微服务SpringCloud之GateWay服务化和过滤器
  • 原文地址:https://www.cnblogs.com/yulongjiayuan/p/5711707.html
Copyright © 2011-2022 走看看