2015-04-29 4 views
2

Я использую классы автоматического макета и размера с помощью UICollectionViewCell. Поэтому идея состоит в том, чтобы сделать UI похожим на Instagram.UICollectionViewCell AutoLayout динамическая высота на основе UILabel

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

enter image description here

при добавлении ограничений, даже нет никакого предупреждения, она всегда показывает «будет пытаться восстановить разбив ограничение» на целевом выходе. Цель состоит в том, чтобы сделать динамическую ячейку профиля основанной на типах iphone и динамической высотой на основе bioLabel. Сейчас я делаю это статическим что очень неправильно, потому что, когда я использую этот метод

systemLayoutSizeFittingSize:UILayoutFittingCompressedSize 

всегда возвращает нулевое значение, и я предполагаю, что это из-за ограничения недоразумению autolayout. Можете ли вы рассказать мне, как я могу рассчитать размер ячейки на основе ограничений? Я создал проект в github, anyhelp был бы очень благодарен!

CollectionViewAutoLayout

ответ

2

Я скачал код и нашел этот вопрос. Смотрите, вы можете решить свою проблему просто, заменив эту строку кодов в методе collectionView: layout: sizeForItemAtIndexPath.

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.section == 0) { 
     CGFloat height = [self findHeightForText:@"Description about yourself, who you are and what impact did you do to the environment. did you do to the environment. Description about yourself, who you are and what impact did you do to the environment. did you do to the environment. who you are and what impact did you do to the environment. did you do to the environment. who you are and what impact did you do to the environment. did you do to the environment." havingMaximumWidth:[UIScreen mainScreen].bounds.size.width andFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]]; 
     return CGSizeMake([UIScreen mainScreen].bounds.size.width, 150 + height); 
    } 
    else { 
     return CGSizeMake((([UIScreen mainScreen].bounds.size.width - 2.0)/3.0), (([UIScreen mainScreen].bounds.size.width - 4.0)/3.0)); 
    } 
} 

Добавить этот метод для расчета высоты динамически.

#pragma mark - Height Calculation Method 
- (CGFloat)findHeightForText:(NSString *)text havingMaximumWidth:(CGFloat)widthValue andFont:(UIFont *)font { 
    CGSize size = CGSizeZero; 
    if (text) { 
     //iOS 7 
     CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{ NSFontAttributeName:font } context:nil]; 
     size = CGSizeMake(frame.size.width, frame.size.height + 1); 
    } 
    return size.height; 
} 

Заменить его один раз и тест на всех устройствах и дайте мне знать ... Надеюсь, что это помогает :)

+2

Спасибо человек! Это решает проблему, но как насчет автозапуска? можете ли вы дать совет, как сделать все правильно? Поэтому я могу понять, как работает автозапуск ... но я буду принимать ваш ответ сейчас. – xeravim

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