Come ridimensionare una cella.imageView in una TableView e applicare la tinta in Swift

Ho una tableView con una cella creata in cellForRowAtIndexPath e aggiungere del testo fittizio:

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

Poi aggiungo un immagine di prova per il cellulare imageView:

var image = UIImage(named: "cd.png")
cell.imageView!.image = image

Risultato:

Come ridimensionare una cella.imageView in una TableView e applicare la tinta in Swift

Per regolare il colore, io uso il seguente codice:

cell.imageView?.tintColor = UIColor.redColor()

Risultato:

Come ridimensionare una cella.imageView in una TableView e applicare la tinta in Swift

L’immagine è troppo grande in cella, in modo che è possibile regolare le dimensioni utilizzando il seguente codice:

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()

Mentre l’immagine fa ridimensionare, la tinta è perduto:

Come ridimensionare una cella.imageView in una TableView e applicare la tinta in Swift

Tutte le idee per favore?

InformationsquelleAutor Anthony | 2015-07-25

 

5 Replies
  1. 16

    Si può procedere in un altro modo :

    1) Creare delle celle personalizzate con il proprio UIImageView size e 2 etichette separate

    2) Aggiungere UIImageView come Subview di Cella

    var cellImg : UIImageView = UIImageView(frame: CGRectMake(5, 5, 50, 50))
    cellImg.image = UIImage(named: "yourimage.png")
    cell.addSubview(cellImg)
    • Grazie. Non vale la pena di creazione di un custom cella così potrai dare il tuo secondo suggerimento di un andare. Post aggiornamento una volta ho provato.
    • OK (Y) fammi sapere
    • Ha lavorato per voi?
    • Perfetto. Ne ho fatto uno che, che era quello di rendere il frame 0, 0, 20, 20 e poi aggiunto la sottoview per l’effettiva immagine vista: cell.imageView?.addSubview(cellImg) Questo centra l’immagine a destra c’è posto piuttosto che regolare manualmente le impostazioni del telaio. Grazie.
    • Benvenuto in qualsiasi momento 🙂
    • Come si potrebbero spostare la loro etichette?

  2. 22

    Senza soluzione personalizzata cella

    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
      }
    • Questo mi aiuta molto, ma c’è una qualità di immagine persi, qualsiasi idea di come mantenere la qualità dell’immagine?
    • hai una risposta ? Io mi trovo nello stesso problema
    • Ho trovato la risposta qui : stackoverflow.com/questions/31451798/…
    • Per me questo lavorato solo con la modalità di rendering .alwaysOriginal
  3. 5

    Per 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
      }
  4. 3

    Per l’OBIETTIVO C senza Custom tableViewCell

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    
     {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"abc" forIndexPath:indexPath];
    
        //Configure the cell...
    
        if (cell==nil) {
    
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"abc"];
    
        }
    
    
        cell.textLabel.text = [menuItemsArray objectAtIndex:indexPath.row];
    
        cell.imageView.image = [UIImage imageNamed:[menuItemsImagesArray objectAtIndex:indexPath.row]];
    
    
        CGSize  itemSize = CGSizeMake(20, 20);
    
        UIGraphicsBeginImageContextWithOptions(itemSize, false, self.view.contentScaleFactor);
    
        CGRect  imageRect = CGRectMake(0, 0, itemSize.width, itemSize.height);
    
        [cell.imageView.image drawInRect:imageRect];
    
        cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
    
        UIGraphicsEndImageContext();
    
    
    
    
    
    
        return cell; }
  5. 3

    in 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))

Lascia un commento