文章概要:

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 < ) {
[self.homePageCouponsTableView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.titleLabel.mas_bottom).offset();
make.left.mas_equalTo(self.bgView.mas_left).offset();
make.right.mas_equalTo(self.bgView.mas_right).offset(-);
make.bottom.mas_equalTo(self.bgView.mas_bottom).offset(-);
make.height.mas_equalTo(tableFrame.size.height);
}];
[self.homePageCouponsTableView.superview layoutIfNeeded];
}
}

让tableView的高度等于contentSize的高度、动态调整tableView的高度、tableView的高度自适应布局的更多相关文章

  1. iOS学习之路十三(动态调整UITableViewCell的高度)

    大概你第一眼看来,动态调整高度是一件不容易的事情,而且打算解决它的第一个想法往往是不正确的.在这篇文章中我将展示如何使图表单元格的高度能根据里面文本内容来动态改变,同时又不必子类化UITableVie ...

  2. [转] iOS TableViewCell 动态调整高度

    原文: http://blog.csdn.net/crayondeng/article/details/8899577 最近遇到了一个cell高度变化的问题,在找解决办法的时候,参考了这篇文章,觉得不 ...

  3. 动态调整UITableViewCell高度的实现方法

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPa ...

  4. iOS开发——Autolayout下动态调整单元格高度

    情景描述: 有时候我们希望更新某一个单元格的数据,通常的做法是使用reloadData方法更新整个单元格.但是对一些情况是不适用的或者说实现起来比较麻烦.比如说这种简单的"点开"一 ...

  5. css经典布局——头尾固定高度中间高度自适应布局

    转载:穆乙 http://www.cnblogs.com/pigtail/ 相信做过后台管理界面的同学,都非常清楚这个布局.最直观的方式是框架这个我不想多写费话,因为我们的重心不在这里.如果有不了解的 ...

  6. Android - 动态调整ListView高度

    布局中,如果设计ListView的高度为包裹内容,那么ListView的高度是随着它的子条目的数量的变化而改变的, 这就可能会导致ListView下面的一些控件的位置也会随着ListView的高度的变 ...

  7. HighCharts 图表高度动态调整

    HighCharts 图表高度动态调整 前言 在使用HighCharts控件过程中,发现图表可以自适应div的高度,无法根据图表x.y轴的数量动态调整div高度,否则图标挤在一起,看起来非常不美观,也 ...

  8. android中动态修改ImageView控件的宽高度

    本例实现了动态修改ImageView控件的宽高度,有两个按钮,一个按钮实现放大image,一个按钮实现缩小image activity_main.xml <?xml version=" ...

  9. 问题:一球从某高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?

    import java.util.Scanner; //题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? public c ...

随机推荐

  1. AMD R7 2700X 安装虚拟机

    自己组装的台式机,选用的是微星X470主板,该主板默认的虚拟化技术是关闭的,在bios中也不太容易找到,具体方法如下. [开机或重启]--[按住DEL进入BIOS]--[高级模式F7]--[选择OC] ...

  2. Java面向对象编程 -5.2

    静态代码块 静态代码块主要指的是使用static关键字定义的代码块 静态块的定义需要考虑到两种情况: 主类中定义静态块 非主类中定义静态块 静态块执行主要是给static属性进行初始化的 此时可以发现 ...

  3. 计算机二级-C语言-对文件的读写操作。链表的定义与赋值。对字符串的遍历和处理。

    //程序填空题:在此程序中,通过定义学生结构体变量,存储了学生的学号,姓名和三门课的成绩.所有学生数据均以二进制方式输出到文件中.函数fun()函数的功能是重写形参filename所指文件中最后一个学 ...

  4. Android系统架构(图解)

    下图是 Android 操作系统的架构,架构包括 4 层,由上到下依次是应用程序层.应用程序框架层.核心类库和 Linux 内核.其中,核心类库中包含系统库及 Android 运行环境. 图1  An ...

  5. Java 9 New Features

    Java 9 概述 1. jdk 9 的发布.经过 4 次跳票,历经曲折的 java 9 终于终于在 2017 年 9 月 21 日发布. 2. Java 9 中哪些不得不说的新特性?java 9 提 ...

  6. ES5-Array的新增方法

    Array.prototype.indexof(value):得到值在数组中的第一个下标 Array.prototype.lastIndexof(value):得到值在数组中的最后一个下标 Array ...

  7. 遍历 Map 的方式

    今天获取到一个Map 集合,想循环遍历出内容,突然发现忘记如何遍历Map,平时用的太少. Map 集合的内容是 Key , Value 键值对形式存储 第一种是 for 循环遍历 Map<Str ...

  8. ES-倒排索引

    一.什么事倒排索引 二.倒排索引为什么查询速度快 (1)ES全文检索的底层是使用倒排索引实现的 (2)倒排索引会将文档的内容进行关键词分词,可以使用关键词直接定位到文档的内容

  9. leetcode 0208

    目录 ✅ 108. 将有序数组转换为二叉搜索树 描述 解答 py [tdo rev 0208]py知识:if not x: 和if x is not None:和if not x is None:使用 ...

  10. I/O-<文件读写、输出>

    读写 FileInputStream fis=null; fis=new FileInputStream("D://2016.txt");//初始文件位置 int i=0; byt ...