Ios UICollectionViewCell自动布局基于UILabel的动态高度

Ios UICollectionViewCell自动布局基于UILabel的动态高度,ios,autolayout,size-classes,Ios,Autolayout,Size Classes,我正在使用UICollectionViewCell的自动布局和大小类。因此,我们的想法是制作一个与Instagram类似的UI 问题是,我无法完全理解如何添加正确的自动布局,因为添加缺少的约束似乎没有神奇地完成这些事情 当我添加约束时,即使没有警告,它也总是在目标输出上显示“将尝试通过打破约束来恢复”。我们的目标是根据iphone类型使剖面单元格动态,并根据bioLabel使高度动态。现在我把它设为静态,这是非常错误的,因为当我使用这个方法时 systemLayoutSizeFittingSi

我正在使用UICollectionViewCell的自动布局和大小类。因此,我们的想法是制作一个与Instagram类似的UI

问题是,我无法完全理解如何添加正确的自动布局,因为添加缺少的约束似乎没有神奇地完成这些事情

当我添加约束时,即使没有警告,它也总是在目标输出上显示“将尝试通过打破约束来恢复”。我们的目标是根据iphone类型使剖面单元格动态,并根据bioLabel使高度动态。现在我把它设为静态,这是非常错误的,因为当我使用这个方法时

systemLayoutSizeFittingSize:UILayoutFittingCompressedSize
它总是返回零,我想这是因为放错了自动布局约束。您能告诉我如何根据单元格的约束条件计算单元格的大小吗?我已经在github创建了这个项目,任何帮助都将不胜感激


我下载了您的代码并发现了问题。请参阅,只需在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;
}

更换一次并在所有设备中测试,然后让我知道。。。希望有帮助:)

谢谢你,伙计!它解决了这个问题,但是自动布局呢?你能给我一些建议吗?这样我就能理解自动布局是如何工作的。。但我现在就接受你的回答。