GithubHelp home page GithubHelp logo

liangdahong / uitableviewdynamiclayoutcacheheight Goto Github PK

View Code? Open in Web Editor NEW
412.0 7.0 76.0 105.84 MB

🖖高性能的自动计算采用 Autolayout 布局的 UITableViewCell 和 UITableViewHeaderFooterView 的高度,内部自动管理高度缓存。

License: MIT License

Objective-C 92.74% Ruby 0.87% Shell 0.19% Swift 6.19%
uitableview uitableviewcell height cache autolayout masonry fdtemplatelayoutcell uicollectionviewcell uicollectionview wechat

uitableviewdynamiclayoutcacheheight's Introduction

介绍

  • UITableViewDynamicLayoutCacheHeight 是一个便捷的,高性能的自动计算使用 Autolayout 布局【XibStoryBoardMasonrySnapKitSDAutoLayout ...】的 UITableViewCellUITableViewHeaderFooterView 的高度,支持横竖屏,内部自动管理高度缓存,已兼容 Swift 。

Installation with CocoaPods

pod 'UITableViewDynamicLayoutCacheHeight'
pod install
#import <UITableViewDynamicLayoutCacheHeight/UITableViewDynamicLayoutCacheHeight.h>
  • 如果只想使用免注册获取 Cell 和 UITableViewHeaderFooterView 可使用如下的 pod
pod 'UITableViewDynamicLayoutCacheHeight/Category'

Installation with Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate UITableViewDynamicLayoutCacheHeight, add the following to your Cartfile.

github "liangdahong/UITableViewDynamicLayoutCacheHeight" ~> 5.2.0

手动安装

  • 下载项目 【 clone https://github.com/liangdahong/UITableViewDynamicLayoutCacheHeight.git
  • UITableViewDynamicLayoutCacheHeight 文件夹下的全部内容拖拽到你的项目。

图文使用说明

Cell 使用 Xib 构建 「 也支持纯代码布局,只要是使用 Autolayout 均可 」

  • 创建你的 Cell 且使用约束布局, 保证【 Cell 中的 View 从上向下布局,最底部的 View 的 MaxY 刚好是 Cell 所需高度即可】【不要设置底部约束限制,从上向下布局即可,内部会自动去获取最底部的 View 然后把它的 MaxY 做为 Cell 所需的高度 在 代码 144~167 行 可查看获取过程,然后做各种缓存操作 】

  • 在 UITableView 获取高度的代理方法里实现如下代码,Block 中的代码和 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 中的代码一致即可。

  • 现在你的 UITableView 已经自动算高自动缓存高度了,效果如下:

框架实现原理

高度计算原理

提前创建 Cell,然后填充内容,然后强制布局,然后获取 Cell 中 MaxY 最大的 View,然后取此 View 的 MaxY 为 Cell 所需高度【所以保证 Cell 中的 View 的 MaxY 最大的值即为 Cell 需要的高度至关重要】,内部会自动管理缓存的保存和清空操作。

问题

  • 系统自动算高的缺陷大家应该都比较清楚,如:没缓存,重复计算,界面跳动,由于是边滚边算在布局复杂的 Cell 有一些问题,只支持iOS8+,布局必须要填充整个 Cell,在布局的时候一些场景需要设置优先,不然会报约束冲突。

  • UITableView-FDTemplateLayoutCell 最开始我使用是此框架,同时 API 设计也参考自 FDTemplateLayoutCell,还用了几张素材,😁,在此感谢了 ,但后面有一些 Bug 一直没处理 😭,布局必须要填充整个 Cell,在布局的时候一些场景需要设置优先级,不然会报约束冲突,就迁移到了 UITableViewDynamicLayoutCacheHeight

  • UITableViewDynamicLayoutCacheHeight 的缺陷有,

    • ① 可能会多加一个 View【可以在计算的结果上加上底部距离,不建议这样处理】
  • 基于此框架实现了一个简陋的微信朋友圈功能 微信朋友圈 代码是几年前随便写的 😂,没准备调整了,感兴趣的可以瞧瞧。

常见问题处理

  • 如果使用 key 做缓存,表示高度只和 key 有关,只要使用相同的 key 就会得到相同的高度,内部永远不会刷新这个高度「 即使调用了 reloadData 」。

联系

  • 欢迎 issuesPR
  • 也可以添加微信 进微信交流群。

License

UITableViewDynamicLayoutCacheHeight is released under the MIT license. See LICENSE for details.

uitableviewdynamiclayoutcacheheight's People

Contributors

liangdahong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

uitableviewdynamiclayoutcacheheight's Issues

网络图片

如果图片是从网络下载的能自动适配高度吗?

maxYView问题

大佬,maxYView demo能用代码写一下吗,再cell中最后一个view设置为cell.maxYView吗,如果需要加常量,写在那个地方比较好

问下当有两个不确定高度的view时怎么处理

有一个label 在一个imageview 上面, label 不一定多少内容, imageview的宽高 后台会返回数据, 但是我发现用数据输入到 masonry里面后 不能正确计算
例如

__block CGFloat bottomHeight = 30 + height /5.0 + 10;

   [self.contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
       make.top.mas_equalTo(self.contentView.mas_top).mas_offset(60);
       make.left.mas_equalTo(self.avatarImageView.mas_left);
       make.right.mas_equalTo(self.honorImageView.mas_left).mas_offset(-10);
       make.bottom.mas_equalTo(self.contentView.mas_bottom).mas_offset(-bottomHeight);
}];

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.