Ios 自动布局-将UILabel调整为其Superview并调整其大小

Ios 自动布局-将UILabel调整为其Superview并调整其大小,ios,ios6,uilabel,uicollectionview,autolayout,Ios,Ios6,Uilabel,Uicollectionview,Autolayout,我有一个UICollectionView,其中包含一些单元格 每个单元格内都有一个UILabel。标签中有一个字母,它就像一块瓷砖一样。将更多单元格添加到UICollectionView时,UICollectionViewCells将按以下方式更改大小: -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionVi

我有一个
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);
    }

}
-(CGSize)collectionView:(UICollectionView*)collectionView
布局:(UICollectionViewLayout*)collectionViewLayout
SizeFormitedIndeXPath:(NSIndexPath*)indexPath{
//NSLog(@“%s”,函数);
NSLog(@“单词数组计数为:%i”,self.wordArray.count);

如果(self.wordArray.count,您可以设置如下布局约束:

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中的文本可以自动收缩(请参见)。因此,如果您最初将字体大小设置为最大单元格所需的大小,随着标签收缩,文本将随之收缩。

在IB中重新创建此项工作正常。我能够将单元格中标签侧面所需的水平/垂直限制设为0/并正常工作。

不幸的是,这不起作用k、 我在cell init方法中添加了“self.letterLabel.adjustsFontSizeToFitWidth=YES;”以及上述约束。奇怪的是,它对我有效。您是否在IB中设置了
最小ScaleFactor
?奇怪的是,是。我认为问题更多的是应该在哪里设置它。我需要的是标签框与单元格框匹配,以及要缩放的标签。它应该在cells init中设置(如上所述),还是在“cellForItemAtIndexPath”中设置?您可以在interface builder中完成所有操作吗?我通过制作带视图的笔尖、在视图中放置标签以及设置自动布局约束(和最小比例因子)快速进行了测试如上所述。如果调整视图的大小,应该会看到标签随之调整大小,当标签对于文本来说太小时,文本也会随之调整大小。我如何在IB中设置这些约束?这是我第一次使用AutoLayout,并且缺少文档。