根据 `UITableViewCell` 中的 `UILabel` 文本更改 `UIView` 宽度

Posted

技术标签:

【中文标题】根据 `UITableViewCell` 中的 `UILabel` 文本更改 `UIView` 宽度【英文标题】:Change `UIView` Width as per `UILabel` Text in `UITableViewCell` 【发布时间】:2017-06-20 09:55:03 【问题描述】:

在我的UITableViewCell 中有带宽度约束的UIView,里面有Image 和UILabel

【问题讨论】:

【参考方案1】:

UIStackView 中添加您的视图,并在该视图中添加您的标签和imageView,并为标签和imageView 设置适当的约束。并删除所有计算大小的代码。

【讨论】:

L --> Left R --> Right T --> Top B --> BottomUITableViewCell --> StackView with L, T, R, B Constraint, StackView --> UiVIew with L, T、R、B 约束、UiView --> ImageView 与 L、T、H、W UILabel 与 L、T、R、H UILabel 与 L、T、R、B 但没有发生单元格显示为全宽,请看我的更新的问题。 UIView 宽度混乱或设置不正确。我在屏幕截图中看不到您的问题。你能详细说明一下吗?这张截图是我的回答吗? 我是否需要对 StackView 以及它的子视图(如 UIView、UILabel、imageView)进行约束?现在 UIView 没有宽度限制了 你需要给 stackview - (L, T , T , B to cell) 而不是视图,然后是 UIImageView - L, T , H, W, Label1 -( L to imageview) , T, T,( B 到标签 2) , Label2 - L,T, T,(B 到视图) 是的,您需要提供底部约束才能查看第二个标签或第三个标签。【参考方案2】:

删除arrAlreadyChangeCellFrames。为一个对象设置一次的单元格可以为不同的对象重置,因此必须调整其大小。

Tableview 和 Collectionview 通过重用单元格来工作。因此,即使您滚动得非常快,内存中也只有少数几个单元格。因此,cellForRowAtIndexPath 中始终遵循一条非常重要的规则:每个 if 都必须有一个 else。因为单元格可以重复使用,所以您在一种情况下设置的任何内容都必须在另一种情况下取​​消设置。

此外,对于大多数布局,您不需要在文本更改时设置标签的宽度。只需将宽度设置为允许的最大尺寸,文本就会尽可能多地填满。

【讨论】:

【参考方案3】:

使用UIStackView。您无需考虑任何事情。

【讨论】:

我是否需要对 StackView 以及 UIView、UILabel、imageView 等子视图进行约束? 你需要为 stackview 及其子视图提供约束。但第二个取决于您的需求

以上是关于根据 `UITableViewCell` 中的 `UILabel` 文本更改 `UIView` 宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 UITableViewCell 中的内容调整水平 UICollectionView 的高度

根据 UITableViewCell 中 UIImageView 中的图像设置 UIView 宽度

如何根据同一节 Swift 4 中的数组更改 UITableViewCell 颜色

如何根据自适应布局和情节提要使 uitableviewcell 中的 uilabel 相对于设备进行包装

自定义 UITableViewCell 根据屏幕大小调整大小

UITableViewCell 高度根据行内容使用自动布局动态计算