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

Posted

技术标签:

【中文标题】根据 UITableViewCell 中 UIImageView 中的图像设置 UIView 宽度【英文标题】:Set UIView width based off of image in UIImageView in UITableViewCell 【发布时间】:2016-06-15 23:56:51 【问题描述】:

我有一个 UITableViewCell 的子类,在单元格中我有一个 UIImageView,其内容模式设置为 ScaleAspectFit。 UIImageView 具有静态高度并使用相等的前导和尾随约束,它还具有顶部约束。

在 UIImageView 的正下方,我有一个 UIView,我希望它的宽度等于缩放图像的宽度。理想情况下,我也想设置一个最小宽度。

我似乎无法在图像视图中获取图像的大小。

import UIKit

class ViewController: UIViewController 

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.



extension ViewController: UITableViewDataSource, UITableViewDelegate 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return 1


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    guard let cell = tableView.dequeueReusableCellWithIdentifier("sampleCell") as? SampleCellTableViewCell else 

        return UITableViewCell()
    

    return cell


// 单元格

class SampleCellTableViewCell: UITableViewCell 

@IBOutlet weak var theImage: UIImageView!
@IBOutlet weak var theView: UIView!

override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code


override func setSelected(selected: Bool, animated: Bool) 
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state


到目前为止,我已经尝试了很多东西,所以如果你有一个新的想法,我希望你有一个新的想法,谢谢。

【问题讨论】:

你具体尝试了什么? 【参考方案1】:

解决方案最终是向视图添加宽度约束,然后为其创建一个出口并将其常量值更改为图像视图中缩放图像的宽度。

// 单元格

class SampleCellTableViewCell: UITableViewCell 

@IBOutlet weak var theImage: UIImageView!
@IBOutlet weak var theView: UIView!
@IBOutlet weak var theViewWidthConstraint: NSLayoutConstraint!

override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code


override func setSelected(selected: Bool, animated: Bool) 
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state


// cellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    guard let cell = tableView.dequeueReusableCellWithIdentifier("sampleCell") as? SampleCellTableViewCell else 

        return UITableViewCell()
    

    cell.theViewWidthConstraint.constant = cell.theImage.frameForImageInImageViewAspectFit().width

    return cell

您可以在此处找到 frameForImageInImageViewAspectFit() 方法定义:https://***.com/a/36428745/4096655

【讨论】:

以上是关于根据 UITableViewCell 中 UIImageView 中的图像设置 UIView 宽度的主要内容,如果未能解决你的问题,请参考以下文章

IOS:用 UIImageView 填充 NSArray

根据选择更改 UITableViewCell 中按钮的背景颜色

UITableviewCell 高度根据 In 侧另一个 UITableviewCell 高度

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

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

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