如何在TableView中调整cell.imageView的大小并在Swift中应用tintColor

Ant*_*ony 15 uitableview ios swift

我有一个tableView与cellForRowAtIndexPath中创建的单元格并添加一些虚拟文本:

cell = UITableViewCell(style: UITableViewCellStyle.Subtitle,
            reuseIdentifier: "cell")
cell.textLabel?.text = "Test Title"
cell.detailTextLabel?.text = "Test detail label"
Run Code Online (Sandbox Code Playgroud)

然后我将测试图像添加到单元格的imageView:

var image = UIImage(named: "cd.png")
cell.imageView!.image = image
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

要调整颜色,我使用以下代码:

cell.imageView?.tintColor = UIColor.redColor()
Run Code Online (Sandbox Code Playgroud)

结果:

颜色调整细胞imageView

单元格中的图像太大,因此我使用以下代码调整大小:

var itemSize:CGSize = CGSizeMake(20, 20)
UIGraphicsBeginImageContextWithOptions(itemSize, false, UIScreen.mainScreen().scale)
var imageRect : CGRect = CGRectMake(0, 0, itemSize.width, itemSize.height)
cell.imageView!.image?.drawInRect(imageRect)
cell.imageView!.image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
Run Code Online (Sandbox Code Playgroud)

虽然图像调整大小,但tintColor会丢失:

在此输入图像描述

有什么想法吗?

Ham*_*ari 23

解决方案无需定制单元

func imageWithImage(image:UIImage,scaledToSize newSize:CGSize)->UIImage{

    UIGraphicsBeginImageContext( newSize )
    image.drawInRect(CGRect(x: 0,y: 0,width: newSize.width,height: newSize.height))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage.imageWithRenderingMode(.AlwaysTemplate)
  }




override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell

    cell.imageView?.tintColor = UIColor.greenColor()
    cell.imageView?.image = imageWithImage(UIImage(named: "imageName")!, scaledToSize: CGSize(width: 20, height: 20))

    // Configure the cell...

    return cell
  }
Run Code Online (Sandbox Code Playgroud)

  • 我在这里找到了答案:http://stackoverflow.com/questions/31451798/new-generated-image-quality-is-low-ios-swift (3认同)

Ash*_*kad 16

你可以用另一种方式做到:

1)使用您自己的UIImageView大小和2个单独的标签创建自定义单元格

2)添加UIImageView作为Subview电池的

var cellImg : UIImageView = UIImageView(frame: CGRectMake(5, 5, 50, 50))
cellImg.image = UIImage(named: "yourimage.png")
cell.addSubview(cellImg)
Run Code Online (Sandbox Code Playgroud)

  • 完善.我创建了一个,它将框架设置为0,0,20,20,然后将子视图添加到实际图像视图中:cell.imageView?.addSubview(cellImg)这将图像置于正确的位置,而不是手动调整框架设置.谢谢. (2认同)

小智 7

在 swift 4 中:

func image( _ image:UIImage, withSize newSize:CGSize) -> UIImage {

    UIGraphicsBeginImageContext(newSize)
    image.draw(in: CGRect(x: 0,y: 0,width: newSize.width,height: newSize.height))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage!.withRenderingMode(.automatic)
}

cell.imageView?.image = image(UIImage(named: "yourImage.png")!, withSize: CGSize(width: 30, height: 30))
Run Code Online (Sandbox Code Playgroud)


Kus*_*tha 5

对于Swift 3

func imageWithImage(image:UIImage,scaledToSize newSize:CGSize)->UIImage{

        UIGraphicsBeginImageContext( newSize )
        image.draw(in: CGRect(x: 0,y: 0,width: newSize.width,height: newSize.height))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage!.withRenderingMode(.alwaysTemplate)
    }

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell

    cell.imageView?.tintColor = UIColor.greenColor()
    cell.imageView?.image = imageWithImage(image: UIImage(named: "imageName")!,scaledToSize: CGSize(width: 20, height: 20))

    // Configure the cell...

    return cell
  }
Run Code Online (Sandbox Code Playgroud)