AutoLayout - 将 UILabel 调整为它的 Superview 并调整它的大小
Posted
技术标签:
【中文标题】AutoLayout - 将 UILabel 调整为它的 Superview 并调整它的大小【英文标题】:AutoLayout - Resizing UILabel to its Superview and sizing it 【发布时间】: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
大小更新字体大小?
【问题讨论】:
【参考方案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/所需,这很有效。
【讨论】:
以上是关于AutoLayout - 将 UILabel 调整为它的 Superview 并调整它的大小的主要内容,如果未能解决你的问题,请参考以下文章
在iOS中使用autolayout调整内容大小的UILabel
AutoLayout 在地图标注中动态调整 UILabel 高度和宽度?
使用 Interface Builder 和 Autolayout 在 UIScrollView 中正确调整 UILabel 的大小?