UIImageView适合自定义tableview单元格中的最大宽度

时间:2016-11-01 21:15:45

标签: ios swift uitableview uiimageview autolayout

需要设置哪些自动布局约束,以便tableview单元格内的图像扩展到Twitter应用中的单元格宽度边框?

我无法完成它,并想知道哪些约束和设置是必要的。

enter image description here

3 个答案:

答案 0 :(得分:3)

您应该设置前导,尾随,顶部和底部约束。因此,width将根据屏幕宽度调整大小,height将根据图像的宽高比进行设置,因为您的单元格具有动态高度。

答案 1 :(得分:1)

我只关注宽度限制(前导和尾随),但您也可以以类似的方式调整其他约束。底部。

此外,您可能希望更改图像视图以支持此功能,但这取决于您使用的图像。我选择了Aspect Fill以确保它使用了整个宽度。如果您的图像尺寸不合适,此设置将裁剪顶部&它的底部。

enter image description here

请注意,在“添加新约束”窗口中,左侧&右侧框有一条红色实线,表示它们已被选中。

您可以根据需要调整imageView,以便根据需要提供一些填充,例如在链接图像中也可以看到。设置约束的方法仍然是相同的,只是框中的值会有所不同。

答案 2 :(得分:1)

首先,您应该知道当您使用“UITableViewAutomaticDimension”设置单元格的高度时,单元格中的UIImageView无效。

如果您设置了'身高限制'并改变它的价值将起作用。

因此,设置“领先'”,'''' top'' bottom'和'身高'图像视图的约束

如果您的图片已下载,请将其缩小并进行数学计算并设置“高度限制”。用它。

enter image description here

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
    return UITableViewAutomaticDimension
}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
{
    return UITableViewAutomaticDimension
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCell(withIdentifier: "list")

    if let iv = cell?.contentView.viewWithTag(1) as? UIImageView
    {
        // this UIImageView.image(url: URL, placeHolder: UIImage, complete: (UIImage)->()) is my custom function.
        // you can use SDWebImage's function
        iv.image(url: URL(string: "http://imageurl")!, placeHolder: nil, complete: { (img) in

            // calculate imageview's height
            let ivHeight = (iv.frame.size.width * img.size.height) / img.size.width

            // get height constraint and set the value.
            for lc in iv.constraints
            {
                if lc.firstAttribute == .height
                {
                    // this will change cell's height automatically
                    lc.constant = ivHeight
                    break
                }
            }
        })
    }

    return cell!
}

抱歉我的英语不好。 :(