2012-10-05 44 views
6

Tengo que crear una UICollectionViewCell personalizada para mostrar una imagen y un nombre para la imagen, y en la parte superior de la imagen hay una imagen de marco que es 2 píxeles más grande ancho y alto que la imagen. Sin embargo, no importa lo que haga, la imagen parece ser más grande que la imagen del marco. Hice lo mismo para la vista de tabla, y funciona perfecto.UIImageView muestra la imagen fuera de límites en una subclase UICollectionViewCell

Aquí está el código:

//GridCell.h 

@interface GridCell : UICollectionViewCell 
@property(nonatomic, strong) UILabel *lblName; 
@property(nonatomic, strong) UIImageView *image; 
@end 

//GridCell.m 

#import "GridCell.h" 

@implementation GridCell 

@synthesize image, lblName; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 

     UIImage *bg = [UIImage imageNamed:@"borderUIimgLg.png"]; 

     UIImageView *bgImage = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, frame.size.width, frame.size.width)]; 
     [bgImage setImage:bg]; 
     [bgImage setContentMode:UIViewContentModeScaleAspectFill]; 
     NSLog(@"BG Image size %f, %f", bgImage.frame.size.width, bgImage.frame.size.height); 


     UIImageView *contentImage = [[UIImageView alloc] initWithFrame:CGRectMake(2.0, 2.0, frame.size.width-4.0, frame.size.width-4.0)]; 
     [contentImage setContentMode:UIViewContentModeScaleAspectFill]; 
     [contentImage setClipsToBounds:YES]; 
     self.image = contentImage; 

     [self.contentView addSubview:self.image]; 

     [self.contentView addSubview:bgImage]; 

     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(2.0, frame.size.width, frame.size.width - 4.0, 21.0)]; 
     [label setFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:11.0]]; 
     [label setTextAlignment:NSTextAlignmentCenter]; 
     [label setBackgroundColor:[UIColor clearColor]]; 
     self.lblName = label; 
     [self.contentView addSubview:self.lblName]; 
    } 
    return self; 
} 

El UICollectionViewCell tiene un tamaño de 67 x 100, por lo que en el código, el bgImage supone que es siempre ser 67 x 67 y su origen es (0,0) y se supone que contentImage tiene un marco de (0,0,63,63). Por la depuración, parece correcto. Sin embargo, el conentimage siempre es más grande que el bgImage. Sin embargo, el tamaño original de la imagen es de 80 x 80. He intentado setClipToBounds, setContentViewMode en el cell.ContentView o el imageView, pero ninguno funciona.

Se adjunta una captura de pantalla sobre el problema. Image in UIImage view out of bounds

Cualquier ayuda es apreciada.

+0

También traté de maquetar todos los elementos en una punta y en el guión gráfico, obtengo los mismos resultados. – Zhao

Respuesta

1

está utilizando 2 veces frame.size.width en lugar de frame.size.height en el otro

edición, intente esto:

en la célula, cuando se utilizan métodos initWithFrame, utilizar el disparador .botones propiedad de la celda. si Init del imageview dentro de la frontera uso del método CGRectInset para inicializar el imageview con límites más pequeños y estableció el centro imageviews al igual que el contentView de la célula

+0

eso es realmente lo que quería, para que la imagen tenga el mismo ancho y altura, que es igual al ancho de la celda. – Zhao

+0

Funciona. Muchas gracias :) He cambiado 'UIImageView * contentImage = [[UIImageView alloc] initWithFrame: CGRectMake (2.0, 2.0, frame.size.width-4.0, frame.size.width-4.0)];' a 'UIImageView * contentImage = [[UIImageView alloc] initWithFrame : CGRectInset (bgImageView.bounds, 6, 6)]; 'y sucede la magia. Necesito descubrir cuál es la diferencia para estos dos. 4.0 o 6.0 no importa, solo 6.0 es lo mejor para mi aplicación. – Zhao

0

Intente cambiar UIViewContentModeScaleAspectFill a UIViewContentModeScaleAspectFit.

+0

Probé Fill and Fit y no tuve suerte. intenté de nuevo, no funcionaba :( – Zhao

23

Esto podría haber encontrado la respuesta a estas alturas, tratar:

contentImage.clipsToBounds = YES; 
Cuestiones relacionadas