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






 


推荐阅读
  • 开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤
    开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • Android 自定义 RecycleView 左滑上下分层示例代码
    为了满足项目需求,需要在多个场景中实现左滑删除功能,并且后续可能在列表项中增加其他功能。虽然网络上有很多左滑删除的示例,但大多数封装不够完善。因此,我们尝试自己封装一个更加灵活和通用的解决方案。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 在Android开发中,实现多点触控功能需要使用`OnTouchListener`监听器来捕获触摸事件,并在`onTouch`方法中进行详细的事件处理。为了优化多点触控的交互体验,开发者可以通过识别不同的触摸手势(如缩放、旋转等)并进行相应的逻辑处理。此外,还可以结合`MotionEvent`类提供的方法,如`getPointerCount()`和`getPointerId()`,来精确控制每个触点的行为,从而提升用户操作的流畅性和响应性。 ... [详细]
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社区 版权所有