2012-02-25 20 views
5

quando si aggiunge un'immagine per cella di tabella, di default si va a sinistra:UITableViewCell allineamento immagine a destra, possibile?

cell.imageView.image = [UIImage imageNamed:[arrImages objectAtIndex:indexPath.row]]; 

come posso cambiarlo che ogni immagine nel UITableViewCell andrà automaticlly a destra e la textLabel sarà 10px a sinistra dell'immagine.

Grazie mille!

+0

temo che non è possibile con standar 'UITableViewCell' devi usare la tua cella e poi personalizzarla. – HelmiB

risposta

10

Un altro modo è quello di creare una cella personalizzato ed eseguire l'override layoutSubviews metodo.

@interface CustomCell : UITableViewCell 

@end 

@implementation CustomCell 

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    // grab bound for contentView 
    CGRect contentViewBound = self.contentView.bounds; 
    // grab the frame for the imageView 
    CGRect imageViewFrame = self.imageView.frame; 
    // change x position 
    imageViewFrame.origin.x = contentViewBound.size.width - imageViewFrame.size.width; 
    // assign the new frame 
    self.imageView.frame = imageViewFrame; 
} 

@end 

Rembember che in cellForRowAtIndexPath è necessario creare e riutilizzare CustomCell e non UITableViewCell.

Spero che aiuti.

Modifica

#import "CustomCell.h" 

// other code here... 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"CustomCell"; 
    CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    return cell; 
} 
+0

Grazie per la soluzione. PS: Not imageViewFrame.position.x ma imageViewFrame.origin.x – uerceg

+0

Ottima soluzione! Ho usato il tuo codice per centrare l'immagine – louissmr

+0

Utilizzato una versione rapida di questo e ha funzionato benissimo. – LondonGuy

1

provare questo:

cell.imageView.frame = CGRectMake(cell.frame.size.width - cell.imageView.frame.size.width, cell.imageView.frame.origin.y, cell.imageView.frame.size.width, cell.imageView.frame.size.height); 
[cell.yourTexLabel sizeToFit]; 
cell.yourTexLabel.frame = CGRectMake(cell.imageView.origin.x - cell.yourTexLabel.frame.size.width - 10, cell.yourTexLabel.frame.origin.y, cell.yourTexLabel.frame.size.width, cell.yourTexLabel.frame.size.height); 
+0

no amico ... non funziona. inoltre, 'yourTexLabel' è 'cell.textLabel, ma non è in grado di riconoscerlo per qualche motivo .. –

+0

oh beh, amico ... ho solo intuito che stavi usando una sottoclasse di celle tua ... puoi' Fare troppo con la cella standard ... – meronix

0

Una soluzione è quella di utilizzare un costume UITableViewCell. I passi sono:

  1. creare una nuova classe Objective-C che è una sottoclasse di UITableViewCell, per esempio LabeledImageTableViewCell. Dichiarare ivars e proprietà per un UILabel e un UIImageView.
  2. In Interface Builder, impostare il contenuto di UITableView a Prototipi dinamici. Trascina un UIImageView e un UILabel in una cella di visualizzazione tabella e posizionali. Imposta la classe della cella su LabeledImageTableViewCell. Collegare le uscite della cella agli oggetti UILabelUIImageView di LabeledImageTableViewCell.
  3. Nel delegato per UITableView (di solito un UITableViewController, a volte un UIViewController) implementare il origine dati metodi, ad esempio:

    //#pragma mark - Table view data source 
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 
        return 1; 
    } 
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
        return (NSInteger)[rowData count]; 
    } 
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        static NSString *CellIdentifier = @"tvcLabeledImage"; 
        LabeledImageTableViewCell *cell = (LabeledImageTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
        if (cell == nil) { 
         cell = [[LNCCorrelationInfoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
        } 
        cell.myImage = [UIImage imageNamed:@"imageForThisRow.png"]; 
        cell.myLabel = "imageForThisRow"; 
        return cell; 
    } 
    

Inoltre, controllare i video di Apple dal WWDC 2011, Modifiche di UITableView, Suggerimenti & Trucchi e Presentazione di Interface Builder Storyboarding (Accesso necessario: https://developer.apple.com/videos/wwdc/2011/.)

5

Trova la soluzione qui codice.

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"foo.png"]]; 
cell.accessoryView = imageView; 

Per il vostro riferimento.

UITableViewCell with image on the right?

+0

Grazie Narasimha Nallamsetty ;) – Abo3atef

1

trovato una risposta migliore da @TomSwift qui https://stackoverflow.com/a/31616694/1884707

cell.contentView.transform = CGAffineTransformMakeScale(-1,1); 
cell.imageView.transform = CGAffineTransformMakeScale(-1,1); 
cell.textLabel.transform = CGAffineTransformMakeScale(-1,1); 
cell.textLabel.textAlignment = NSTextAlignmentRight; 

Applicando una trasformazione sul contentView è possibile inserire l'ImageView sulla destra.

0

in swift3 e swift4, possiamo usare questo:

cell.accessoryView = UIImageView (immagine: UIImage (denominato: "imageNmae"))

Problemi correlati