AutoLayout - 将UILabel调整为Superview并调整大小

时间:2013-08-15 15:52:45

标签: ios ios6 uilabel uicollectionview autolayout

我有UICollectionView,其中包含一些单元格。

每个单元格中包含一个UILabel。在标签内是一个字母,它充当一个瓷砖(如此)。将更多单元格添加到UICollectionView UICollectionViewCells更改大小时,使用以下内容:

-(CGSize)collectionView:(UICollectionView *)collectionView 
                 layout:(UICollectionViewLayout *)collectionViewLayout 
 sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
//    NSLog(@"%s",__PRETTY_FUNCTION__);

    NSLog(@"the word array count is: %i",self.wordArray.count);
    if (self.wordArray.count <= 5) {
        return CGSizeMake(50,50);
    } else if (self.wordArray.count <= 6 ) {
        return CGSizeMake(30, 30);
    } else if (self.wordArray.count <= 8 ) {
        return CGSizeMake(10, 10);
    } else {
        return CGSizeMake(100,100);
    }

}

我现在要做的是每次更改布局时重新调整单元格内的UILabel。如何使用AutoLayout将标签大小调整为单元格大小?另外,如何根据UILabel尺寸更新字体大小?

2 个答案:

答案 0 :(得分:0)

您可以设置类似以下布局约束的内容:

NSDictionary *viewDictionary = NSDictionaryOfVariableBindings(label);
NSDictionary *insetMetrics = @{
    @"left" : @(10.0f),
    @"right" : @(10.0f),
    @"top" : @(10.0f),
    @"bottom" : @(10.0f)
};

[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(left)-[label]-(right)-|" options:kNilOptions metrics:insetMetrics views:viewDictionary]];
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(top)-[label]-(bottom)-|" options:kNilOptions metrics:insetMetrics views:viewDictionary]];

如果设置了正确的属性,UILabel中的文本会自动缩小(请参阅UILabel Class Reference)。因此,如果您最初将字体大小设置为最大单元格所需的大小,则随着标签缩小,文本将随之缩小。

答案 1 :(得分:0)

在IB工作中重新创建这个。我能够将单元格本身标签边的水平/垂直约束设置为0 /需要,这样就可以了。