0

На самом деле, я хочу динамически установить кнопку и заголовок кнопки Динамический. Я попробовал это и получил ширину динамического содержимого, но не устанавливал ширину и высоту ячейки.set Динамическая ширина и высота ячейки просмотра коллекции

- (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); 
    } 

и выход, как этот

OUTPUT look like this when i used this code

Это идеальный вариант я думаю, что если я сделать ячейки динамическую ширину и высоту, поэтому, пожалуйста, руководство меня через это.

+0

Вы хотите сделать ячейку шириной достаточно большой, чтобы отобразить текст ячейки? –

+0

или высота ячейки + ярлыка, чтобы показать полный текст? –

+0

ПОКАЗАТЬ ПОЛНЫЙ ТЕКСТ В КЛЕТОК – Virus

ответ

2

Прагма знак - GetHeightFromString

- (CGFloat)getTextHeightFromString:(NSString *)text ViewWidth:(CGFloat)width WithPading:(CGFloat)pading FontName:(NSString *)fontName AndFontSize:(CGFloat)fontSize 
{ 
    NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:fontName size:fontSize]}; 
    CGRect rect = [text boundingRectWithSize:CGSizeMake(width, MAXFLOAT) 
            options:NSStringDrawingUsesLineFragmentOrigin 
            attributes:attributes 
            context:nil]; 
    //NSLog(@"rect.size.height: %f", rect.size.height); 
    return rect.size.height + pading; 
} 

Получите высоту строки от этого метода и добавьте ее в исходную высоту вашей ячейки или метки или кнопки, которую вы хотите использовать.

Например:

- (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); 
    } 

Вы, возможно, потребуется изменить высоту внутренней этикетке тоже для этого используют тот же метод в cellForItemAtIndexPath методе вашего UICollectionView. Далее вы можете настроить свой собственный путь.

+0

он работает спасибо – Virus

+0

Рабочий код. Качественный товар – pkc456

0

Вы можете поместить различные размеры в пейзаж & портретном режиме попробовать это -

- (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]; 
} 

вы можете вызвать invalidateLayout метод на .collectionViewLayout свойство вашего UICollectionView

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

Эй, это не работает, и на самом деле я должен вернуть return CGSizeMake (rect.size.width, 50); в - (CGSize) CollectionView: (UICollectionView *) CollectionView расположение: (UICollectionViewLayout *) collectionViewLayout sizeForItemAtIndexPath: (NSIndexPath *) indexPath – Virus

1

В Swift 2.0:
Использование a UICollectionViewFlowLayout активировать автоматическую калибровку ячейки.
Следующий код внутри подкласса UICollectionViewController включит автоматическую калибровку для его раскладки потока.

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 возникает вопрос макета при добавлении новых строк в CollectionView в Swift 3.0. Пожалуйста, проверьте. –

-1

Вы можете попробовать это ...

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

ширина, высота являются динамически вычисленное значение

Благодаря

Смежные вопросы