热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS中AutoLayout自动布局,自适应高度

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

以往我们做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上拖空间的时候,会比较麻烦,我们只需要确定哪个量是会变化的,哪个量是不会变化的,这样我们就可以完成自适应.这样写,比我们以前的方法要省时间,当然,现在刚开始可能会比较慢






 


推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
author-avatar
路过然后错过
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有