动态 tableViewCell 中 imageView 的纵横比

Posted

技术标签:

【中文标题】动态 tableViewCell 中 imageView 的纵横比【英文标题】:aspect ratio for imageView in dynamic tableViewCell 【发布时间】:2015-08-01 17:22:45 【问题描述】:

我有一个带有 4 个动态原型单元格的 tableView:其中三个用于不同类型的标签,一个用于 imageView。

在 viewDidLoad() 中,我使用此代码根据每个单元格的内容确定其高度:

tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension

问题出在带有 imageView 的单元格上。 要显示的图片几乎占据了所有单元格,并且需要横向显示,保持其纵横比。 我能够做到,设置顶部、底部、尾随、前导和高度约束:通过这种方式,tableView 可以计算出适当的 row.height。

从 iPhone 6 切换到 4,图像宽度减小,但高度保持不变,导致奇怪的比例。

我需要根据时刻的宽度来计算视图的八,我尝试了两种方式:

为高度创建一个 NSLayoutConstraint 出口。如果我为它分配一个静态值,它可以工作,但是当我尝试计算时:

constraintOutletForTheHeight.constant = CGFloat(myImageView.frame.size.width / 2)

它开始以旧值显示第一个单元格,其他单元格以计算出的高度值显示。

我也尝试从 Storyboard 设置 aspectRatio 约束,但在这两种情况下 Xcode 都告诉我它不能同时满足约束。

感谢您的关注

【问题讨论】:

【参考方案1】:

经过大量 println() 之后,我发现了我的错误所在并找到了解决方案(不是最优雅的,但至少它有效)。

我发现 imageView 的起始宽度是通过情节提要分配的(即使在我设置了 imageView.image 属性之后),经过一点滚动后,它会切换到假定值:这就是我遇到约束错误的原因。 作为 tableView:cellForRowAtIndexPath: 中的解决方案,我使用了 tableView width 属性,如下所示:

cell.<image_view_height_contraint>.constant = CGFloat(tableView.frame.size.width / 2)

如果您知道更好的解决方案,欢迎您,否则我希望它可以帮助其他人。

【讨论】:

以上是关于动态 tableViewCell 中 imageView 的纵横比的主要内容,如果未能解决你的问题,请参考以下文章

动态设置可重用 tableViewCell 的标识符

通过点击 UIButton 动态管理 TableViewCell 高度

使用动态tableView的tableViewCell中的动态collectionViewCell执行Segue With Identifier,swift

在 iOS 中实现动态 tableViewCell 的最佳方法

Swift:动态更改 TableViewCell 高度和动态更改 WebView 高度

在 tableViewCell 内动态更改 UIImageView 的宽度和高度