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];
        }
    }
  • 相关阅读:
    今天是全面开发的第一天,特此纪念
    Linux 进程管理 (ZZ)
    骑车上班
    VSFTPD配置小结(一)
    Flash Builder 4 在Chrome的调试
    测试一下Windows Live Writer
    转:C++强大的背后
    转:Flex中的Image屬性 (width, contentWidth, content.width)的差異
    Flash Builder 4 安装提示“安装程序检测到计算机重新启动操作可能处于挂起状态“的解决
    使用简单工厂和State模式替换冗余的 switchcase 语句
  • 原文地址:https://www.cnblogs.com/cchHers/p/9418562.html
Copyright © 2011-2022 走看看