【问题标题】:AutoLayout - Resizing UILabel to its Superview and sizing itAutoLayout - 将 UILabel 调整为它的 Superview 并调整它的大小
【发布时间】:2013-08-15 15:52:45
【问题描述】:

我有一个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 大小更新字体大小?

【问题讨论】:

    标签: ios ios6 uilabel uicollectionview autolayout


    【解决方案1】:

    您可以设置如下布局约束:

    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)。因此,如果您最初将字体大小设置为您希望最大单元格的大小,随着标签的缩小,文本也会随之缩小。

    【讨论】:

    • 不幸的是,这不起作用。我添加了'self.letterLabel.adjustsFontSizeToFitWidth = YES;'以及上面对单元格初始化方法的限制。
    • 奇怪,它对我有用。你设置minimumScaleFactor了吗?
    • 奇怪的是在 IB 中。我认为问题更多在于应该在哪里设置。我需要的是标签框架与单元格框架相匹配,并且标签中的文本可以缩放到该效果。应该在单元格初始化中还是在“cellForItemAtIndexPath”中设置(如上所述)?
    • 您能在界面生成器中完成所有操作吗?我快速测试了一个带有视图的笔尖,在视图中放置标签,并设置自动布局约束(和最小比例因子),如上所述。然后,如果您调整视图大小,您应该会看到标签随之调整大小,当标签对于文本而言太小时,文本也会随之调整大小。
    • 如何在 IB 中设置这些约束?这是我第一次使用 AutoLayout 并且缺少文档。
    【解决方案2】:

    在 IB 中重新创建它是可行的。我能够将单元格本身中标签两侧的水平/垂直约束设置为 0/所需,这很有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-11
      • 2013-12-27
      • 2016-03-18
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      相关资源
      最近更新 更多