根据 `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 相对于设备进行包装