动态 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 的纵横比的主要内容,如果未能解决你的问题,请参考以下文章
通过点击 UIButton 动态管理 TableViewCell 高度
使用动态tableView的tableViewCell中的动态collectionViewCell执行Segue With Identifier,swift
在 iOS 中实现动态 tableViewCell 的最佳方法