4

UICollectionViewいくつかのセルを含む があります。

各セルはそのUILabel中に 1 つを保持します。ラベル内には 1 文字があり、タイルとして機能します (それ自体)。さらにセルが追加された場合UICollectionViewUICollectionViewCells次のようにサイズを変更します。

-(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ですか?

4

2 に答える 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 Class Referenceを参照してください)。そのため、最初にフォント サイズを最大のセルに適したサイズに設定すると、ラベルが縮小すると、テキストもそれに合わせて縮小されます。

于 2013-08-19T15:30:23.057 に答える
0

これをIBで再作成するとうまくいきました。セル自体のラベルの側面に水平/垂直の制約を 0/required に設定することができ、これは機能しました。

于 2013-08-21T21:47:53.983 に答える