【问题标题】:aspect ratio for imageView in dynamic tableViewCell动态 tableViewCell 中 imageView 的纵横比
【发布时间】: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 都告诉我它不能同时满足约束。

感谢您的关注

【问题讨论】:

    标签: ios swift autolayout


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 2023-04-03
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 2020-06-14
      • 2020-06-30
      相关资源
      最近更新 更多