• 让tableView的高度等于contentSize的高度、动态调整tableView的高度、tableView的高度自适应布局


    文章概要:

    1、简介下,tableView中的内容如何高度自适应的布局

    2、如何做到让tableView的高度动态调整


    还是看图作文吧~

    首先,tableView的高度就是用户能够看见里面更大世界的那个窗口的大小,一般是固定的。

    然后在cell里面布局的时候,像图中粉红色的view展示的内容需要全部展示出来,这样的话这个粉红view的高度就需要是动态变化的。比如一个UILabel,因为它是属于有内置大小的控件(自身的size通过其内部的内容所决定可以自身计算出来的控件),你只需要设置这个label的原点(x,y)和宽度就行了,当然还要设置lineNumber = 0(不限制行数)。然后cell的高度不要设定成固定数值,cell的高度由内部view决定。

    tableView是scrollView的子类,那如何设置contentSize呢?由最后一个cell的底部决定。

    OK。这就是我们一般做的tableViewCell高度自适应的布局方式,思维发散下,我们直接用scrollView的时候,设置contentSize也要用这种布局策略:由内部决定外部。

    -----------

    然后第二个需求是这样的:打开软件弹出赠送的优惠券列表,优惠券多的情况下就固定tableView的高度,让里面的内容可以滚动。如果优惠券少的情况下,里面的内容不足以滚动的情况下,就让tableView本身的高度变为“刚好”能展示里面的内容就行了。

    将这个需求转化为技术语言的话就是,给定tableView的contentView一个最大的高度MaxHeight,如果contentView的真实高度小于MaxHeight的时候,tableView的高度就是contentView的真实高度,如果contentView的真实高度大于MaxHeight的时候,tableView的高度就固定在MaxHeight。

    实现代码:

    - (void)setupMonitor {
        [self.homePageCouponsTableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
    }
    
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
        CGRect tableFrame = self.homePageCouponsTableView.frame;
        tableFrame.size = self.homePageCouponsTableView.contentSize;
        if (tableFrame.size.height < 280) {
            [self.homePageCouponsTableView mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(10);
                make.left.mas_equalTo(self.bgView.mas_left).offset(15);
                make.right.mas_equalTo(self.bgView.mas_right).offset(-15);
                make.bottom.mas_equalTo(self.bgView.mas_bottom).offset(-25);
                make.height.mas_equalTo(tableFrame.size.height);
            }];
            [self.homePageCouponsTableView.superview layoutIfNeeded];
        }
    }
  • 相关阅读:
    Java实现第九届蓝桥杯付账问题
    Java实现第九届蓝桥杯付账问题
    Java实现第九届蓝桥杯星期一
    Java实现第九届蓝桥杯星期一
    Java实现第九届蓝桥杯倍数问题
    Java实现第九届蓝桥杯倍数问题
    Java实现第九届蓝桥杯倍数问题
    Java实现第九届蓝桥杯倍数问题
    Java实现第九届蓝桥杯倍数问题
    Java实现第九届蓝桥杯三体攻击
  • 原文地址:https://www.cnblogs.com/cchHers/p/9418562.html
Copyright © 2020-2023  润新知