2012-10-05 15 views
6

Görüntü için bir görüntü ve bir ad göstermek üzere bir UICollectionViewCell özelleştirmek zorundayım Ve resmin üstünde, 2 piksel daha büyük bir kare görüntü var. görüntüden genişlik ve yükseklik. Bununla birlikte, ne yaptığımın bir önemi yok, görüntü çerçeve resminden daha büyük görünüyor. Tablo görüntüsü için aynı şeyi yaptım ve mükemmel çalışıyor. kodunda, bgImage 67 x 67 olmak her zaman olması gerekiyordu ve bunun kökeni böyleceUIImageView bir UICollectionViewCell alt sınıfında sınırların dışında görüntüyü gösterir

//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; 
} 

UICollectionViewCell, 67 x 100 bir büyüklüğe sahiptir (0,0: Burada

kodudur) ve contentImage'ın bir karesi olması gerekiyordu (0,0,63,63). Hata ayıklama ile doğru görünüyor. Bununla birlikte, her zaman bgImage'den daha büyük olan conentimage. Görüntünün orijinal boyutu 80 x 80 olsa da. Set.ClipToBounds, setContentViewMode, cell.ContentView veya imageView üzerinde denedim, ancak hiçbiri çalışır.

Sorunla ilgili bir ekran görüntüsü eklenmiştir. Image in UIImage view out of bounds

Herhangi bir yardım için teşekkür ederiz.

+0

Aynı zamanda bir nibdeki ve öykü panosundaki tüm öğeleri düzenlemeye çalıştım, aynı sonuçları aldım. – Zhao

cevap

1

diğeri

düzenlemek yerine frame.size.height ait frame.size.width, şunu deneyin: initWithFrame yöntemlerini kullanırken hücrede

, kendini kullanın hücrenin .bounds özelliği. Eğer sınırın içindeki imageview küçük sınırları ile ImageView başlatmak için CGRectInset yöntemini kullanın ve bu artık cevap bulmuş olabilir

+0

aslında istediğim şey, görüntünün eşit genişlik ve yüksekliğe sahip olması, hücrenin genişliğiyle aynı olması. – Zhao

+0

Çok çalışıyor. :) "UIImageView * contentImage = [[UIImageView ayırma] initWithFrame: CGRectMake (2.0, 2.0, frame.size.width-4.0, frame.size.width-4.0)]; için" UIImageView * contentImage = [[UIImageView ayırma] initWithFrame : CGRectInset (bgImageView.bounds, 6, 6)] ve sihir gerçekleşir. Bu ikisinin farkının ne olduğunu bulmalıyım. 4.0 veya 6.0 önemli değil, sadece 6.0 benim app için en iyisidir. – Zhao

0

UIViewContentModeScaleAspectFill öğesinin UIViewContentModeScaleAspectFit öğelerini değiştirmeyi deneyin. Eğer 2 kez kullanırken

+0

Hem Doldur ve Sığdır'ı hem de şans denemeyi denedim. tekrar denedim, çalışmadım :( – Zhao

23

hücrenin contentView aynı etmek imageviews merkezini ayarlamak init eğer , deneyin:

İlgili konular