UITableViewCell结合Masonry布局

作者: HHHHHHHHHHD | 来源:发表于2015-10-20 20:01 被阅读10296次
    UITableView-FDTemplateLayoutCell与Masonry结合的妙处

    最近在看🐑神的博客,发现里面的优化UITableViewCell高度计算的那些事这篇博客写的很精髓。🐑神是用storyboard写的。然后我参照🐑神UITableView-FDTemplateLayoutCell的demo,自己写了一个UITableView-FDTemplateLayoutCell结合Masonry去写的cell布局。在这途中遇到不少坑,主要就是Masonry用的不熟练。Masonry的详细用法
    点击蓝色的可以到库的解释文档

    先上效果图,然后再一步一步讲解。讲解的不是很好。求大神指点。
    demo.gif
    这里的话就不说数据的解析了。因为我是本地的json数据解析。直接开始cell的布局。
    结构图.png
    图上的0,1,2,3,对应的cell(TableViewCell)里面的view。在这里我是把这个cell分为了4个模块。创建极其初始化。

    板块0publicView的创建(适配代码在讲完版块3创建之后)
    创建.png
    板块一TopGroupView的创建
    版块1.png

    布局代码,里面有解释

    板块一代码.png
    板块二MidGroupView的创建
    板块二.png

    ![版块二代码.png . . .].png](http:https://img.haomeiwen.com/i1027569/d0f0ec7f761de359.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    板块三UnderGroupView的创建
    板块三.png 板块三代码.png
    最后来到publicView版块0的布局
    版块0代码.png

    这样就把全部布局搞定了。就可以看到效果图了。


    观察🐑神的demo。
    观察🐑神的demo.png

    在这里可以发现。当如果是用纯frame的计算时候,是要进行上面代码的操作。并且cell.fd_enforceFrameLayout = NO;默认是等于YES的。在使用Masonry时候不用进行这些操作。

    这个使用🐑神的库很简单,只需要导入

    "UITableView+FDTemplateLayoutCell.h"
    "UITableView+FDTemplateLayoutCell.m"
    然后在结合Masonry使用就可以了。

    来到最后一步

    这个方法在🐑神类里面已经封装好了。直接调用就可以。


    写这个方法.png

    写完了。感觉表达能力还是很差。很多都不知道怎么表达。不过还是希望可以帮到各位。有什么问题可以留言我,我看到就会马上回的。

    Demo地址。喜欢的给个赞吖。

    相关文章

      网友评论

      • 舒马赫:Masory写的很棒,但是不喜欢纯代码写界面,太慢了,另外由于autolayout先天原因布局速度是比较慢的,会影响帧率。推荐使用xml的布局库FlexLib,采用前端布局标准flexbox(不使用autolayout),支持热刷新,自动计算高度等。可以到这里了解详细信息:

        https://github.com/zhenglibao/FlexLib
      • aydwb:fd_enforceFrameLayout默认是等于NO吧 会出错的情况应该是用自动布局还设置fd_enforceFrameLayou=YES;或者手动布局忘了写sizeThatFits方法
      • 5c2ad94c9daf:大神,问一下,为什么需要建一个publicView容器来装所有的子view呢,为什么不能直接把子view都放到cell的contentview上,这样处理有什么好处吗?
      • unhangcorn:感谢,好人一生平安.
        大神有没有遇到label太多行时高度计算不准的情况啊?
      • niuxingyu:所有cell都重叠在一行是什么情况呢?
        e0c1a64e624a:楼主 你好 使用 masonry和FD 一直约束冲突 <NSLayoutConstraint:0x60000008e290 UITableViewCellContentView:0x7fba75c36120.width == 414>,
        <NSLayoutConstraint:0x600000084380 UITableViewCellContentView:0x7fba75c36120.width == 0>,怎么解决 ?
        HHHHHHHHHHD:@niuxingyu 不会吧 你是不是没有约束好。
      • 63f2dd559f52:cell中东西较多时,会出现问题
      • 蛮荒星域:我想请问下,如果cell中有展开和缩回的功能,那么视图的高度应该如何控制呢?用masonry。手动计算高度并调整的话这个是容易实现的,如果只是用masonry和FD结合呢?
        蛮荒星域:@我本善良 晚上回去发给你,你留个地址或其他的,或是再交流一下
        蛮荒星域:@我本善良 嗯,解决了!结合masonry跟FD已经实现了,很简单。
        我本善良:现在有解决的思路没?masonary实现cell的折叠效果
      • iamgaoshuai:布局代码为什么也是写在init方法里面 而不是layoutSubviews
      • LeeDev:写的太详细了,给个赞,先看看,再来评论
      • hhgvg:字体大小和cell高度没适配
      • 雨雪霏霏why:我用Masony布局cell,发现tableview 滑动卡顿,求大神解答如何优化
      • 听小马儿说:下载下来无法解压
      • cydida:按照你的demo 高度计算出来有问题
        ** FDTemplateLayoutCell ** calculate using auto layout - 0.5
      • 72dd446d8e3a:多张图片怎么处理啊楼主,求助
      • 986d14688d75:楼主我设置的和你一样怎么没有效果呢?也用的masonry,能加q详细聊一下吗?我qq:422538722
      • 篮球火:如果是用xib自动布局建立的cell,如何使用这个
        HHHHHHHHHHD:@篮球火 那你就要去看fd的原博客。我是习惯纯代码
      • 3471c4738abf:1,fd就是预先调用了一遍Cell的布局,然后对高度做了缓存,等到cellForRowAtIndexPath的时候又调用了一遍cell的布局。要是布局只有一次就好了,比如布局到一个containerView上,不过我用masonry没能实现。。。
        2,对于Cell内容是变化的,即高度也是变化的时候,fd的缓存会有问题吧。
        HHHHHHHHHHD:@duanhjlt 建议你再看下FD的库。以及布局的问题。
      • KK_boy:大神 多张图片怎么处理啊
        HHHHHHHHHHD:@fengege 大爷!你才是大神!
      • godgnay:请问,如果图片是一个URL,不知道SIZE怎么办?怎么做高度的适配?
        godgnay:@像孩子一样 我还试了试 其实也能出来图,但是要拖动之后,因为图下载之后再次拖动才会改变布局。
        godgnay:@像孩子一样 现在服务器给的数据没有size,是不是要自己写一个定的大小比较好啊?
        HHHHHHHHHHD:@shengyang_yu 让服务器给回一个size也可以
      • 147a074a64d1:demo 崩溃了
        口袋海贼王_:我曹大哥,
        HHHHHHHHHHD:@智同宏盛 你去重下噢。
        HHHHHHHHHHD:@智同宏盛 不会崩溃啊。我自己刚刚下载了。没事哦。你崩溃是报什么哦
      • 6fdb0c58ceca:学习一下,今天刚把FD用到项目里边
        HHHHHHHHHHD:@碧野MAX 😂你看到有什么写的不好的提醒下看
        6fdb0c58ceca:@像孩子一样 是的,用Masonry
        HHHHHHHHHHD:@碧野MAX 好好用。你是纯代码么?
      • bb19f132a87c:Demo可以放出来吗?
        bb19f132a87c:@像孩子一样 棒棒哒^_^
        HHHHHHHHHHD:@nerver_more 就是这个哦https://github.com/LHDsimon/UITableVlewDemo :smile: 有什么写的不好的 指导下 :relaxed:

      本文标题:UITableViewCell结合Masonry布局

      本文链接:https://www.haomeiwen.com/subject/ihzzcttx.html