Beka Gelashvili
Beka Gelashvili

Reputation: 83

Change the size of UIImageView in a UITableViewCell

I am a newbie in Swift And Xcode.

Is there any clean way to change UIImageView Size placed inside a UITableViewCell?

This is my TableView, I want to align left label correctly enter image description here

Upvotes: 1

Views: 853

Answers (3)

Nilanshu Jaiswal
Nilanshu Jaiswal

Reputation: 1693

Fix the width of the UIImageView and set its contentMode to .scaleAspectFit.

myImageView.safeAreaLayoutGuide.widthAnchor.constraint(equalToConstant: 50).isActive = true

myImageView.contentMode = .scaleAspectFit
myImageView.clipsToBounds = true

However, if you are using the storyboard, you can set these properties there itself.

Upvotes: 0

Sateesh Yemireddi
Sateesh Yemireddi

Reputation: 4399

Replace

cell.imageView!.image = image

with

cell.imageView?.image = image.scaleImage(toSize: CGSize(width: 40, height: 40))

Add this UIImageView extension to the project.

extension UIImage {
    func scaleImage(toSize newSize: CGSize) -> UIImage? {
        var newImage: UIImage?
        let newRect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height).integral
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0)
        if let context = UIGraphicsGetCurrentContext(), let cgImage = self.cgImage {
            context.interpolationQuality = .high
            let flipVertical = CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: newSize.height)
            context.concatenate(flipVertical)
            context.draw(cgImage, in: newRect)
            if let img = context.makeImage() {
                newImage = UIImage(cgImage: img)
            }
            UIGraphicsEndImageContext()
        }
        return newImage
    }
}

Reason for the error in your code is UITableViewCell is assigning the various size for UIImageView based on the image size inside it. In addition to I've adjusted the image to specific size so that it can fit to imageView content in UITableViewCell.

Note: Please don't post the screenshots of the code as it does not help to others to copy it from the question and which attracts -ve voting as well. However, you can post the screenshots for XIBs, Storyboards and for Simulation errors.

Upvotes: 1

Nicola Lauritano
Nicola Lauritano

Reputation: 79

You could use a stack view or a view with proportianal constraint to the relavite view in your cell xib. In this way the portion of the flag will be always the same.

Otherwise, if you want to do it quickly, you can contraint the leading of the label to the cell view and not with the flag. It's a litte bit dirtier but it should work.

Upvotes: 0

Related Questions