zoukankan      html  css  js  c++  java
  • 让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];
        }
    }
  • 相关阅读:
    PAT 甲级 1115 Counting Nodes in a BST (30 分)
    PAT 甲级 1114 Family Property (25 分)
    PAT 甲级 1114 Family Property (25 分)
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
  • 原文地址:https://www.cnblogs.com/cchHers/p/9418562.html
Copyright © 2011-2022 走看看