2

我有一個uiviewcontroller與子視圖這是一個uicollection視圖。我的視圖控制器實現了所有的collectionview委託。出於某種原因,一些細胞是黑(當我滾動出現,似乎隨機)我的代碼是:ios uiviewcontroller與collectionview子視圖不顯示單元格

#import "NewGalleryViewController.h" 

@interface MyCell : UICollectionViewCell 

@property (nonatomic,strong) UIImageView *imageView; 
@end 

@implementation MyCell 

-(id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    NSLog(@"frame = %@\n", NSStringFromCGRect(frame)); 
    if (self) 
    { 
     self.imageView = [[UIImageView alloc] initWithFrame:frame]; 
     [self.contentView addSubview:self.imageView]; 
    } 
    return self; 
} 

@end 

@interface NewGalleryViewController() <UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout> 

@property (nonatomic,strong) UICollectionView *collectionView; 
@end 

@implementation NewGalleryViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; 
    [layout setItemSize:CGSizeMake(75, 75)]; 

    self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout]; 
    self.collectionView.delegate = self; 
    self.collectionView.dataSource = self; 

    [self.collectionView registerClass:[MyCell class] forCellWithReuseIdentifier:@"newcell"]; 
    [self.view addSubview:self.collectionView]; 
} 


- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    return 1; 
} 
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    return 100; 
} 
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"newcell" forIndexPath:indexPath]; 

    cell.imageView.image = [UIImage imageNamed:@"114"]; 
    return cell; 
} 



-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"%ld",(long)indexPath.row); 
} 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return CGSizeMake(75,75); 
} 

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
{ 
    return UIEdgeInsetsMake(0, 0, 0, 0); 
} 
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section 
{ 
    return 10; 
} 
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section 
{ 
    return 0; 
} 
@end 

Attaching a print screen

Scrolling a bit down

And print of all of the frames for the cells that are created (the seem reasonable for 4 cells in a row):

回答

6

我能解決問題

-(id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 

if (self) 
{ 
    self.imageView = [[UIImageView alloc] initWithFrame:self.bounds]; // earlier it was frame 
    [self.contentView addSubview:self.imageView]; 
} 
    return self; 
} 

在創建內容圖像視圖時,請勿使用單元格的框架,而不要使用self.bounds。 Iam不確定原因。當時幀可以不同,邊界會給出實際值

+0

剛剛算出來了!!!謝謝! – 2013-03-19 12:59:52

+0

frame屬性可能包含大於0的x和y位置值。bounds屬性上x和y的位置值將始終爲0. – NovaJoe 2013-12-13 03:18:01

+0

@anil謝謝 - 這節省了我的一天 – Magnus 2013-12-17 21:29:30

0
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     NSArray *arrayOfviews = [[NSBundle mainBundle]loadNibNamed:@"PersonCollectionViewCell" owner:self options:nil]; 
     self = [[arrayOfviews objectAtIndex:0]isKindOfClass:[UICollectionViewCell class]] ? [arrayOfviews objectAtIndex:0] : nil; 

    } 
    return self; 
} 
相關問題