zoukankan      html  css  js  c++  java
  • iOS中AutoLayout自动布局,自适应高度

    以往我们做cell的自适应的时候都是要写许多的代码进行计算高度,而且在适配的时候容易出现问题,费时耗工.那么下面我们就共同探讨一种基于xib的自动计算高度的方法

    1.我们先创建tableView,tableView的创建可以使用可视化编程,也可以手写代码

    2,自定义cell,要求必须使用xib

    在cell上添加控件的时候,我们必须确定这个控件的哪个方向上的量是确定的,哪个方向上的量是不确定的

    首先我们现在cell的左上角拖一个imageView

    我们可以确定imageView只需要通过 它距左 上的距离以及它自身的宽高 这些数值我们可以根据需求直接写定

    接下来就是imageView右侧的Label,我们根据上图可以看出,这个Label的宽度是会发生变化的,那么我们先将不需要变化的量给定,然后先给需要变化的宽一个预估计值

    Label的左侧是相对于imageView的距离

    那么我们如何将Label的宽度设为自适应

    点击Label,然后点击xcode右侧,选择调整尺度的选项,将需要改变的量前面的"="变为">="

    然后就是下面的Label的自适应,究其原理基本上和上面的这个Label是一样的

    这个Label的上边是基于imageView,左侧右侧可以自己根据需求给定数值,宽度是一定的,据下边的距离是一定的,只有高度需要自适应,设置方法和上面一致,都是改为">=".由于这个Label显示的内容可能会出现多行,所以我们需要在将他的行数设置为0,也就是无限行


    2,设置完cell的控件,我们需要将自定义的cell加上标识符,当然,标识符的内容可以自行设置

    3.然后我们将自定义的cell里面的控件与cell进行关联

    4,tableView里面的设置就是正常的程序,不过在这里我们需要用注册的方式进行创建cell

    其中红色箭头指向的字符串是我们刚才在自定义cell的时候写的标识符

    黄色箭头指向的字符串是我们创建的自定义cell的类名,这里不要写错了,不然会出现nib找不到的错误提示

    在其他的地方的创建就和我们通常写的tableView的创建方法是一样的

    但是这样写是有问题的,因为如果我们转动屏幕的时候,我们之前的布局就会全部变乱,那么我们应该怎么做呢

    首先,我们先将我们需要自定义高度的Label抽离出来,再创建一个类,基于UILabel,在我们创建的UILabel类中,我们需要重写一个方法

    同时,我们在自定义cell里面需要自适应高度的Label创建时就应该使用我们定义的UILabel

    下面我们要做的就是在tableView里边返回行高,在返回行高的方法里面我们要根据Label里面的内容进行判断cell的高度

    首先我们现在tableView里面写一个自定义cell的属性

    @interface TableViewController ()
    
    @property (nonatomic, strong) MyCell *computCell;
    
    @end
    
    接下来我们需要注册计算高度的cell,就是我们设置的这个属性cell


     //注册计算高度的cell
        self.computCell = [self.tableView dequeueReusableCellWithIdentifier:@"MyCell"];
    
    


    上面的代码就是我们返回高度的计算方法,

    * 红色箭头标注的是我们需要传入自适应Label里面的内容,这样我们就可以根据内容来计算cell的高度

    * 接下来的坐标,宽度设置,我们使用的是tableView的宽度,因为我们不需要对其宽度进行自适应,但是后面的高度我们使用的就  是我们自定义的cell的宽度,因为我们要根据Label的高度来计算整个cell的高度

    * 最后返回高度的时候我们使用的是contentView

    这样计算出的自适应高度,当我们旋转屏幕的时候,我们的cell的整个布局也不会发生变化

    当然,如果我们的cell上的内容要是比这个丰富的话,在我们往cell上拖空间的时候,会比较麻烦,我们只需要确定哪个量是会变化的,哪个量是不会变化的,这样我们就可以完成自适应.这样写,比我们以前的方法要省时间,当然,现在刚开始可能会比较慢






     

  • 相关阅读:
    Java 中 Comparable 和 Comparator 接口及其简单应用(一)
    MD5加密算法失效及解决方法
    mybatis bug (二):Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'third_party_id' cannot be null
    IDEA 显示波浪形警告信息,但是程序没有报错
    为用户注册界面添加修改密码选项
    Java 程序读取Mysql数据库时间信息,与真实时间相差 13 小时
    Http 错误:"status":404,"error":"Not Found","message":"No message available”,”path":""
    mybatis bug (一):Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin
    归并排序及数组中逆序对的数量
    ITUNES更改备份保存路径
  • 原文地址:https://www.cnblogs.com/nsjelly/p/4314240.html
Copyright © 2011-2022 走看看