0

Eigentlich möchte ich Button dynamisch und Titel der Schaltfläche erscheinen Dynamic Ich habe dies versucht und bekam Breite von Dynamic Inhalt, aber nicht Einstellung der Breite und Höhe der Zelle.set Dynamische Breite und Höhe der Kollektion view cell

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    ContentArray = [[NSMutableArray alloc]init]; 

    self.collectionview.delegate = self; 
    self.collectionview.dataSource =self; 
    self.collectionview.backgroundColor = [UIColor clearColor]; 


    [ContentArray addObject:@"Planning"]; 
    [ContentArray addObject:@"Resources"]; 
    [ContentArray addObject:@"Human Resources"]; 
    [ContentArray addObject:@"Agriculture"]; 
    [ContentArray addObject:@"Resources management"]; 


} 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
    { 
     return ContentArray.count; 
    } 


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

     CollectionViewCell * Cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell"forIndexPath:indexPath]; 

     [Cell.button setTitle:[ContentArray objectAtIndex:indexPath.row] forState:UIControlStateNormal]; 

     return Cell; 
    } 


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


     CGRect rect = [[ContentArray objectAtIndex:indexPath.row ] boundingRectWithSize:CGSizeMake(HUGE_VALF, 50) options:NSStringDrawingUsesFontLeading attributes:nil context:nil] ; 


     return CGSizeMake(rect.size.width, 50); 
    } 

und Ausgang ist wie dieser

OUTPUT look like this when i used this code

Dieses ist perfekt Ich denke, wenn ich Zelle dynamische Breite und Höhe machen, also bitte mich durch diese führen.

+0

Möchten Sie die Zellenbreite groß genug machen, um den Zellentext anzuzeigen? –

+0

oder Zelle + Label Höhe, um den vollständigen Text anzuzeigen? –

+0

SHOW FULL TEXT IN CELL – Virus

Antwort

2

Pragma Marke - GetHeightFromString

Holen Sie Höhe der Zeichenfolge von dieser Methode und fügen Sie diese auf die ursprüngliche Höhe der Zelle oder Beschriftung oder Schaltfläche, was auch immer Sie verwenden möchten.

Zum Beispiel:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
    { 
     YourCellClass *myCell = (YourCellClass*) [collectionView cellForItemAtIndexPath:indexPath.row]; 

     CGFloat sizeFromString = [self getTextHeightFromString:itemObject.MenuDescription ViewWidth:myCell.frame.size.width WithPading:10 FontName:@"HelveticaNeue" AndFontSize:13]; 

     return CGSizeMake(sizeFromString, sizeFromString); 
    } 

Möglicherweise müssen auch die Höhe des inneren Etikett ändern, die für diese Verwendung derselben Methode in cellForItemAtIndexPath Methode Ihrer UICollectionView. Weitere können Sie Ihren eigenen Weg anpassen.

+0

es funktioniert Danke – Virus

+0

Arbeitscode. Tolles Zeug – pkc456

0

können Sie verschiedene Größen in Mode Landschaft & Porträt setzen versuchen, diese -

- (CGSize)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout *)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{  
    // Adjust cell size for orientation 
    if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) { 
     return CGSizeMake(rect.size.width, 50); 
    } 
    return CGSizeMake(rect.size.width, 50); 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [self.collectionView performBatchUpdates:nil completion:nil]; 
} 

Sie invalidateLayout Methode auf dem .collectionViewLayout Eigenschaft Ihrer UICollectionView

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    [yourCollectionView.collectionViewLayout invalidateLayout]; 
} 
+0

Hey das funktioniert nicht und ich muss tatsächlich zurückgeben CGSizeMake (rect.size.width, 50); in - (CGSize) Kollektion: (UICollectionView *) Collection Layout: (UICollectionViewLayout *) collectionViewLayout sizeForItemAtIndexPath: (NSIndexPath *) indexPath – Virus

1

In Swift 2.0 anrufen:
Verwendung a UICollectionViewFlowLayout aktivieren Sie die automatische Größenanpassung der Zelle.
Der folgende Code in einer UICollectionViewController Unterklasse aktiviert die automatische Größenanpassung für das Flusslayout.

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    if let cvl = collectionViewLayout as? UICollectionViewFlowLayout { 
     cvl.estimatedItemSize = CGSize(width: 150, height: 75) 
    } 

}

+0

estimatedItemSize tritt Ausgabe-Layout, wenn Sie neue Zeilen in Kollektion in Swift 3.0 hinzuzufügen. Bitte prüfe. –

-1

Sie können versuchen, diese ...

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

Breite, sind in der Höhe der dynamisch berechneten Wert

Dank

Verwandte Themen