iOS8 中的表格视图单元格自动布局

2024-02-14

我似乎无法在我的表视图单元格上使用自动布局。

在某些细胞上它似乎起作用,而在另一些细胞上它似乎不起作用。即使是完全相同类型的细胞。

例如,在某些单元格上,描述将超过 1 行文本,并且它将正常工作...

...然而,在其他单元格上,描述将包含超过 1 行的文本,但仅显示其中的 1 行并带有一堆空白。

你能帮我弄清楚我遗漏了什么或做错了什么吗?谢谢!

作为第一次这样做的人,我使用这个 StackOverflow 问题来指导我的流程:在 UITableView 中使用自动布局来实现动态单元格布局和可变行高 https://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights

1. 设置并添加约束

我相信这些在大多数情况下都运作良好。

2. 确定唯一的表视图单元重用标识符

我不完全确定是否需要担心这部分,因为我总是有标题、时间和描述。

对于 iOS 8 - 自调整单元格大小 3.启用行高估计

我将其添加到viewDidLoad:

self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 180.0;

UPDATE: Adding more info per Acey request enter image description here

为了清楚起见,我设置了限制:

  • 标题:左 15、上 85、右 15
  • 标题和时间之间的垂直间距,10
  • 时间和描述之间的垂直间距,10
  • 我 Cmd 单击所有三个标签并添加前缘和后缘 边缘
  • 我将 20 固定在“描述”和“表视图单元格”底部之间

更新2:已解决 下面的答案效果很好,但任何额外的间距都是由于单元格的高度设置太大造成的,因此 Xcode 会自动添加额外的空间来填充单元格的高度,因为文本标签没有填充表视图的整个高度细胞。

如果您遇到此问题并遇到同样的问题,如果您有任何疑问或需要任何帮助,请告诉我。

感谢大家!


我还没有尝试过使用新的 iOS 8 机制。但当我使用 iOS 6 / 7 执行此操作时,我遇到了类似的问题。将应用程序更新到 iOS 8 后,它仍然可以正常工作,所以也许旧方法仍然是最好的方法?

我这里有一些代码示例:AutoLayout 多行 UILabel 剪切一些文本 https://stackoverflow.com/questions/23398042/autolayout-multiline-uilabel-cutting-off-some-text

和这里:AutoLayout uitableviewcell 在横向和 iPad 上根据纵向 iPhone 计算高度 https://stackoverflow.com/questions/23496547/autolayout-uitableviewcell-in-landscape-and-on-ipad-calculating-height-based-on

长话短说,iOS 8 之前的方式涉及保留单元格的副本,只是为了计算内部的高度tableView:heightForRowAtIndexPath:。但这还不足以处理多行UILabel的。我必须子类化UILabel更新preferredMaxLayoutWidth每次layoutSubviews被称为。

The preferredMaxLayoutWidth“修复”似乎是我所缺少的神奇秘密。一旦我这样做了,我的大部分细胞就完美地工作了。

我的第二个问题只要求我正确设置内容压缩阻力和内容拥抱属性,因此例如告诉标签拥抱文本将意味着它不会扩展以填充空白,这将导致单元格收缩。

一旦我完成了这两件事,我的单元格现在可以处理任何字体大小或任何数量的文本,而无需任何混乱的布局代码。有很多东西需要学习,但我确实认为它最终得到了回报,因为我的应用程序中有很多动态内容。

Edit

在遇到我自己的 iOS 8 问题之后,我添加了更多细节来解决这些非常奇怪的 autoLayout 错误。

使用我提到的代码,当单元格“行高”未设置为自定义时,它似乎不起作用。通过选择单元格并单击“自动布局”选项卡(其中包含所有内容压缩阻力设置等),可以在 IB 中找到此设置。按下复选框,它将填充临时高度。

其次,在我的代码中,我保留了单元格的本地副本,然后在heightForRowAtIndexPath:方法。这似乎每次调用时都会使单元格高度增加很多。我必须通过调用以下命令重新初始化本地副本:

localCopy = [self.tableView dequeueReusableCellWithIdentifier:@"mycell"];

看来新的 Xcode 6 / iOS 8 变化非常大,无法向后兼容 iOS 7,而且管理方式似乎也完全不同。

希望这可以帮助。

Edit 2

读完这个问题后:iOS AutoLayout 多行 UILabel https://stackoverflow.com/questions/17491376/ios-autolayout-multi-line-uilabel

我遇到了 iOS 7 / iOS 8 自动布局支持的另一个问题!我压倒一切layoutSubviews对于 iOS 8 我还需要覆盖setBounds更新preferredMaxLayoutWidth呼叫超级后。 WTF苹果变了!

看来是IB中的设置有问题preferredMaxLayoutWidth,因为iOS 7无法使用自动功能,如果你使用同样的UILabel在多个设备上,它只会使用 1 宽度。所以UITableViewCelliOS 8 平板电脑上的线会更大,因为同一个单元在 iOS 8 iPhone 上需要有 2 条线。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS8 中的表格视图单元格自动布局 的相关文章

  • 致命错误:在 Swift 中解包可选值时意外发现 nil

    所以我试图获取 Swift 中输入字段的文本 这就是我得到的 class ViewController UIViewController IBOutlet var passwordField UITextField IBOutlet var
  • 如何在 UITableView 的 switch 语句中创建变量?

    我正在构建一个包含三个部分的 tableView 我已经完成了前两个工作 但最后一个有点阻力 我的问题似乎涉及尝试在 switch 语句中声明变量 实际上是嵌套的 switch 语句 据我所知 这不是一个好主意 但在这种情况下 这似乎是唯一
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • 如何使用 AppDelegate 在视图之间共享 iAd 横幅

    我希望在我的应用程序中实现 iAd 到目前为止 我已经成功地使用下面的方法让它们在每个视图中正确显示 关闭 应用程序委托 import UIKit import iAd UIApplicationMain class AppDelegate
  • 如何从react-native webview获取选择对象

    我有一个应用程序 我使用反应本机 webview 来显示文档 用户可以选择一些文本并执行我提供的一些自定义操作 如何从 webview 获取选择对象into my app 从 0 37 0 开始 RN 中的一个新功能可能会对您有所帮助 里面
  • 无效的捆绑包...包含不允许的文件“frameworks”

    我尝试通过应用程序加载器发布我的应用程序 但我不断收到此错误 我试过了这个解决方案 https stackoverflow com questions 25777958 validation error invalid bundle the
  • 关于在 Objective-C 中迭代 2 个数组的简单问题

    我正在 Objective c 中迭代 NSArray for id object in array1 我现在有另一个 array2 我需要使用当前 array1 的相同索引进行访问 我应该使用另一个 for 语句吗 thanks 您有多种
  • 创建电子书阅读应用程序的教程 - epub 文件格式 [重复]

    这个问题在这里已经有答案了 我正在制作一个电子书阅读应用程序 因为我想执行一些操作 例如更改文本颜色 字体 选择文本等 我知道 iphone os 4 0 和 ipad 现在支持 epub 文件格式 但我不知道如何创建此类应用程序 如果有人
  • AUGraphInitialize添加kAudioUnitSubType_Reverb2到AUGraph时出现错误代码-10868

    我正在尝试添加 AudioUnit 类型kAudioUnitSubType Reverb2 to an AUGraph我得到了 10868 kAudioUnitErr FormatNotSupported 支持的错误AUGraphIniti
  • 如何将动画应用到 GMSMarker

    我正在通过使用适用于 iOS V1 1 0 的 Google Maps SDK 将 iOS 地图迁移到 google 地图来更改我的应用程序 并且我尝试在添加 删除时对标记进行动画处理 但我在与此相关的文档中没有找到任何建议 请建议我如何在
  • 我何时以及为什么要使用 ARC 将局部变量声明为 __weak?

    Mike Ash 撰写了 ARC 简介 http www mikeash com pyblog friday qa 2011 09 30 automatic reference counting html他在那里介绍了这样的内容 weak
  • 将小箭头添加到 iPhone TableView 单元格中单元格的右侧

    这应该很简单 我有一个带有 TableView 的 iPhone 应用程序 如何将经典的小箭头添加到每个单元格的右侧 只需设置相应的附件类型的财产UITableViewCell cell accessoryType UITableViewC
  • 自定义相机视图 Swift iOS 8 iPhone Xcode 6.1

    我想在 iPhone 的 View 中使用相机 我不想使用典型的全屏相机视图 而是我自己的 例如 我想在屏幕中间有一个 200x200 的正方形 并且有一个相机预览 在这个方块下面我想要一个拍照按钮 怎么做 我是新手 速度很快 你会想要使用
  • 如何更改 MGLPolyline 的颜色?

    如何更改 MGLPolyline 的颜色 我曾经看过here https stackoverflow com questions 32024464 customize mglpolyline using mapbox但答案不起作用 我还尝试
  • 将更新的图像保存到 PhotoKit 时缺少图像元数据

    我在更新图像的元数据并将其保存回照片库时遇到问题 一切works除了更改后的图像元数据丢失了之前存在的条目 并且我在操作图像或执行照片库更改块时没有收到任何错误 另外 在写回图像之前的字典看起来就像原始字典加上我在调试器中的字典 我的问题是
  • [项目] 的 Xcode 功能警告可能无法正常运行,因为其权利使用占位符团队 ID

    我是 Xcode 新手 刚刚启动一个单视图项目并遇到以下错误 项目名称 完美音调 Xcode版本 10 2 1 操作系统版本 10 14 5 1 Capabilities for Pitch Perfect may not function
  • CLGeocoder reverseGeocodeLocation 返回“kCLErrorDomain 错误 9”

    我正在根据本文开发具有反向地理编码功能的 iOS 应用程序 地理编码教程 http jonathanfield me jons blog clgeocoder example html 但是当我在模拟器上进行这样的测试时 我收到 kCLEr
  • 在自定义对象中映射 JSON 对象

    我一直在搜索是否可以获取 JSON 字典或数组并将其直接映射到属性与 JSON 标签同名的自定义对象中 但我没有找到任何相关信息 我一直在手动解析 JSON 字典 如下所示 id deserializedObj nil id jsonObj
  • iOS7 XIB 问题。顶部和底部的空白

    我有一个正在设置 ImageView 的视图 自动布局已选中 预览中看起来不错 但当应用程序实际在模拟器上运行时 仅在 iPhone 视网膜 4 英寸模拟器中 顶部和底部显示空白 3 5寸的看起来还不错 使用 iOS7 和 XCODE 5
  • UILocalNotification 播放自定义声音

    我在我的应用程序中实现了本地通知 但我只是想知道是否有一种方法可以播放不属于 iPhone 应用程序主包的一部分的声音 基本上在我的应用程序中 我希望用户录制生成本地通知时播放的声音 而不是播放预先录制的或默认的声音 据我所知 这是可以实现

随机推荐