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 中的表格视图单元格自动布局 的相关文章

  • 使用 UItableViewCell 类型的表达式初始化“CustomCellView *”的指针类型不兼容

    你能帮我理解和 修复下面的错误吗 我不明白CustomCellView是一个子类UItableViewCell 代码已编译 但警告仍然存在 Incompatible pointer type initializing CustomCellV
  • iOS 13 检查 CLLocationManager 的临时授权状态

    根据 WWDC 视频 https developer apple com videos play wwdc2019 705 https developer apple com videos play wwdc2019 705 当你要求 Al
  • UITesting、XCTest 当前 ViewController 类

    简单的问题 我有一个按钮可以执行到下一个视图控制器的操作 我想写 UI XCTest 来告诉我它是否打开了我想要的视图控制器 UI 测试框架无法访问您的应用程序代码 这使得无法对实例进行类断言 你不能够directly告诉屏幕上的控制器的类
  • 如何在 iOS 中将 Firebase 对象持久保存到磁盘?

    看起来Firebase http www firebase comiOS 实现不支持客户端模型的离线缓存 这在实践中意味着 对于需要身份验证的 Firebase 应用程序 您需要首先进行身份验证并等待 Firebase 完成登录 检查用户身
  • iPhone SQLite页面缓存不断增长

    I use sqlite数据库用于存储 还有许多数据库事务 我的问题是 sqlite 页面缓存的内存使用量快速增长 在instruments我可以找到这条线 Graph Category Live Bytes Living Transien
  • 如何使用 SwiftUI 获取多个屏幕上的键盘高度并移动按钮

    以下代码获取键盘显示时的键盘高度 并将按钮移动键盘高度 在转换源 ContentView 和转换目标 SecibdContentView 处以相同的方式执行此移动 但按钮在转换目标处不移动 如何使按钮在多个屏幕上移动相同 import Sw
  • 为具有多个目标和不同平台的项目编写 Podfile

    我正在准备一个支持 OS X 和 iOS 的 Pod 我的 pod 有一些自己的依赖项 这些依赖项在 podspec 文件中定义 因此我使用 Podfile 来管理我用来开发 pod 和运行测试的项目的依赖项 我正在使用 CocoaPods
  • 使用 Quartz 创建 PDF 注释 (iOS)

    有人设法使用 Quartz 在现有 PDF 中编写自定义注释吗 我已经使用 CGPDFDocumentRef 等渲染了 PDF 现在工作正常 我成功地阅读了 Annots 字典 if CGPDFDictionaryGetArray page
  • Objective C 中类别是如何实现的?

    作为一名程序员 我知道如何使用类别 但我很好奇它们是如何实现的 编译器是否将它们编译为对类替换方法 http developer apple com library mac documentation Cocoa Reference Obj
  • 如何使用 Swift 将“完成”按钮添加到 iOS 中的数字键盘?

    它在默认键盘上工作得很好 但我无法让它在数字键盘上工作 有任何想法吗 据我所知 你不能在键盘部分添加 完成 按钮 你应该添加一个inputAccessoryView to the UITextField or UITextView 如果这就
  • 带约束的嵌套集合视图的意外行为 (Swift 4)

    我的表格视图中有一个单元格 其中包含水平分页集合视图 该集合视图的每个页面内都有一个垂直集合视图 为了避免 滚动滚动 问题 我在垂直集合视图中禁用了垂直滚动 垂直集合视图的单元格计数不是静态的 可以是任意数字 因此 这会产生一个问题 集合视
  • 将 Armadillo C++ 库导入 Xcode

    我是 Mac 用户 正在尝试安装和导入 C Armadillo 库 以下是我到目前为止所采取的步骤 1 我从其网站下载了犰狳库 2 我仔细阅读了下载文件中的 Readme txt 文件 解释了如何安装它 3 我使用CMake将犰狳下载文件制
  • 访问 google reader 的 Endpoints API 时出错

    我正在尝试在iPhone APP中实现google reader 到目前为止我已经成功收到了sid and auth 当我尝试使用以下命令调用 Endpoints API 时 问题就出现了GET 这是代码 ASIHTTPRequest re
  • 如何检索 iPhone 的区域设置

    我用谷歌搜索过它 但令我有点惊讶的是我找不到它 我只想访问设备配置的区域设置 我试图找到如何列出所有系统属性 以防我能在那里找到区域设置 但甚至找不到如何做到这一点 我知道 认为 我之前检索过系统属性 但我也记得在谷歌搜索时找到该信息并不容
  • 为arm64或arm7s编译OpenSSL FIPS功能库时出现未知的cpu类型

    我可以成功 至少没有警告并生成 a 文件 针对 arm7 x86 64 和 i386 进行编译 当我编译arm64时 我得到Unknown cpu type 100000c no adjustments made 当我编译arm7s时 我得
  • TTTAttributedLabel 可点击截断标记

    我有一个 TTTAttributedLabel 并为其指定了一个自定义属性截断标记 NSAttributedString atributedTruncationToken NSAttributedString alloc initWithS
  • 使用 ZBarSDK 时 iPhone 相机失去自动对焦功能

    我正在开发一个应用程序 用户可以选择是否要扫描条形码或拍摄某物的照片 为了拍照 我正在使用UIImagePickerController照常 为了扫描条形码 我使用 ZbarSDK 1 2ZBarReaderViewController 拍
  • UILabel 中的文本未垂直居中

    我使用以下代码创建了一个标签 func setupValueLabel valueLabel numberOfLines 1 valueLabel font UIFont name Avenir Black size 50 valueLab
  • cordova插件条码扫描仪打不开扫描

    我的条形码扫描仪插件有问题 我不是天才 我不太了解如何编写网络应用程序 我使用phonegap和cordova 并且尝试制作一个网络应用程序 在单击链接后扫描条形码 我之前已经使用此命令行安装了该插件 cordova plugin add
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat

随机推荐