自动布局 - 调整UILabel大小以适应其父视图并调整大小

4

我有一个包含一些单元格的UICollectionView

每个单元格内都有一个UILabel,标签内只有一个字母,并作为一个“瓷砖”(tile)呈现。当更多单元格被添加到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
您可以设置类似以下布局约束的内容:
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中的文本可以自动缩小。因此,如果您最初将字体大小设置为最大单元格所需的大小,则随着标签的缩小,文本也会随之缩小。


很遗憾,这不起作用。我已经在cell init方法中添加了'self.letterLabel.adjustsFontSizeToFitWidth = YES;'以及上述约束条件。 - StuartM
奇怪,这对我有效。你设置了 minimumScaleFactor 吗? - Eric
在IB中是的,很奇怪。我认为问题更多地在于应该在哪里设置它。我需要标签框架与单元格框架匹配,并且标签中的文本按比例缩放。它应该在单元格的init中设置(如上所述),还是在'cellForItemAtIndexPath'中设置? - StuartM
我该如何在IB中设置这些约束条件?这是我第一次使用AutoLayout,文档不够详细。 - StuartM
我已经添加了一个链接到临时项目。 - StuartM
显示剩余3条评论

0

在 IB 中重新创建此操作是有效的。我能够在单元格中为标签的两侧设置水平/垂直约束为 0/required,这样就行了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接