2014-04-17 25 views
45

UICollectionView'im var, bu etiket içeren yeniden kullanılabilir hücreden hücreleri yükler. Bir dizi bu etiket için içerik sağlar. Etiket genişliğini, size contentToFit ile kolayca içerik genişliğine göre yeniden boyutlandırabilirim. Ama etiket sığdırmak için hücre yapamıyorum.Etiket genişliğine bağlı olarak UICollectionView dinamik hücre genişliği

İşte sizeForItemAtIndexPath Karşılığında kodunun altına

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    return [(NSString*)[arrayOfStats objectAtIndex:indexPath.row] sizeWithAttributes:NULL]; 
} 
+0

benzer sıralama ... http://stackoverflow.com/questions/24915443/uicollectionview- sadece fit-hücre-genişlik ??? – Fattie

cevap

62

bu. görünümünde eklemek // Swift 3'te

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    NSString *testString = @"SOME TEXT"; 
    CGSize calCulateSizze =[testString sizeWithAttributes:NULL]; 
    calCulateSizze.width = calCulateSizze.width; 
    calCulateSizze.height = calCulateSizze.height; 
    return calCulateSizze; 
} 
+4

Size nasıl teşekkür ettiğimi hayal edemezsiniz! Bu gerçekten işe yarıyor. Şimdi sadece [cell.myLabel sizeToFit] problemini çözmem gerekiyor, çünkü sadece tam boyutunda görünür. Ama senin çözümüne bile yakın değildim. – pulp

+0

Yardımlarınız için teşekkürler, ancak hala bir sorunum var. Unutmayın [cell.myLabel sizeToFit] Ben kelimeleri kısaltılmış ve altta kesilmiş harfler var ama ben kaydırdıktan sonra tamam olur (kelimeler normal boyut ve harflerin biraz atlamak). [Cell.myLabel sizeToFit] mesajını yorumlar ve kapatırsam (IB ile oynamaya karar verdim ve gayet iyi çalışıyor) sonunda ve altta kesilmiş kelimelerim var. Ekran görüntüsü aldım http://goo.gl/HaoqQV Retina dışı ekranlarda çok keskin değil ama harflerin kesildiğini görebilirsiniz. Nasıl çözüleceğine dair öneriniz gerçekten takdir edilecektir! SizeToFit yerine – pulp

+1

, metnin CGSize değerini almak için sizeWithAttributes öğesini kullanın, ardından etiketin çerçevesini yeni boyutta ayarlayın. –

22

Ödeme çok kısa CGSize veren olabilir metnin boyutunu kodu

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    arrayOfStats = @[@"time:",@"2",@"items:",@"10",@"difficulty:",@"hard",@"category:",@"main"]; 
} 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:  (NSInteger)section{ 
    return [arrayOfStats count]; 
} 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    return CGSizeMake(??????????); 
} 

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ 

    return 1; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    Cell *cell = (Cell *) [collectionView dequeueReusableCellWithReuseIdentifier:@"qw" forIndexPath:indexPath]; 
    cell.myLabel.text = [NSString stringWithFormat:@"%@",[arrayOfStats objectAtIndex:indexPath.item]]; 
    // make label width depend on text width 
    [cell.myLabel sizeToFit]; 

    //get the width and height of the label (CGSize contains two parameters: width and height) 
    CGSize labelSize = cell.myLbale.frame.size; 

    NSLog(@"\n width = %f height = %f", labelSize.width,labelSize.height); 

    return cell; 
} 
+0

@Vineesh TP Cevabınız için teşekkür ederiz, kesinlikle kontrol edeyim ve size bildiririm! – pulp

+0

+1000 Bu kesinlikle çalışır.Sizin ve Basheer'ın gönderilerinin birlikte yeşil bir onay işareti olmalıdır. –

+0

Hızlı 3 ile bunun nasıl yapılacağı hakkında bir fikriniz var mı? –

8

let size = (arrayOfStats[indexPath.row] as NSString).size(attributes: nil) 
-1

didload
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; 
    [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; 
    layout.estimatedItemSize = CGSizeMake(self.breadScrumbCollectionView.frame.size.width, 30); 
self.breadScrumbCollectionView.collectionViewLayout = layout; 
sorunun
İlgili konular