UILabel 的 TextAlignment
TextAlignment at UILabel
我知道如何在 UILabel 上对齐文本。
但是这个问题有点有线。
所有其他对齐都有效,例如 NSTextAlignmentJustified
、NSTextAlignmentNatural
。只有 NSTextAlignmentCenter
不能使文本居中。
我的 UILabel 是使用 StoryBoard 插入的。
然后 UILabel 的文本格式在程序中实现为
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];
CGRect frame = cell.cellText.frame;
frame.size.width = cell.bounds.size.width;
frame.size.height = cell.bounds.size.height;
cell.cellText.frame = frame;
cell.cellText.font = [UIFont fontWithName:@"ArialMT" size:screenRect.size.height*0.0163];
cell.cellText.textAlignment = NSTextAlignmentCenter;
cell.cellText.lineBreakMode = NSLineBreakByWordWrapping;
cell.cellText.numberOfLines = 0;
cell.cellText.clipsToBounds = YES;
cell.cellText.backgroundColor = [UIColor clearColor];
cell.cellText.textColor = [UIColor blackColor];
if(indexPath.section == 0){
cell.backgroundColor=[UIColor blackColor];
cell.cellText.textColor = [UIColor whiteColor];
if(indexPath.item == 0)
cell.cellText.text = @"Date";
else if(indexPath.item == 1)
cell.cellText.text = @"Age";
else if(indexPath.item == 2)
cell.cellText.text = @"Height (cm)";
else if(indexPath.item == 3)
cell.cellText.text = @"%le";
else if(indexPath.item == 4)
cell.cellText.text = @"Weight (kg)";
else if(indexPath.item == 5)
cell.cellText.text = @"%le";
}
else if(indexPath.section % 2 == 0 && indexPath.section != 0)
cell.backgroundColor=[UIColor grayColor];
else
cell.backgroundColor=[UIColor lightGrayColor];
return cell;
}
为什么不能如图所示居中对齐。
编辑:
我将 UILabel 的背景更改为
if(indexPath.section == 0){
cell.backgroundColor=[UIColor blackColor];
cell.cellText.textColor = [UIColor whiteColor];
cell.cellText.backgroundColor = [UIColor redColor];
if(indexPath.item == 0)
cell.cellText.text = @"Date";
else if(indexPath.item == 1)
cell.cellText.text = @"Age";
else if(indexPath.item == 2)
cell.cellText.text = @"Height (cm)";
else if(indexPath.item == 3)
cell.cellText.text = @"%le";
else if(indexPath.item == 4)
cell.cellText.text = @"Weight (kg)";
else if(indexPath.item == 5)
cell.cellText.text = @"%le";
}
更新后的图片是
不要使用框架来设置 cellText
的位置。单元格未在 collectionView:cellForItemAtIndexPath
中布局,因此框架将是错误的。该帧将是上次重复使用该单元格时的帧,这是完全合理的。
而是使用 AutoLayout 将 UILabel 约束到单元格的所有边缘。
替换这些行
CGRect frame = cell.cellText.frame;
frame.size.width = cell.bounds.size.width;
frame.size.height = cell.bounds.size.height;
cell.cellText.frame = frame;
使用此代码。
cell.cellText.center = cell.center;
CGRect frame = cell.cellText.frame;
frame.size.width = cell.bounds.size.width;
frame.size.height = cell.bounds.size.height;
cell.cellText.frame = frame;
如果你想使用自动布局,那么只需在你的标签上添加两个约束。
- 在容器中垂直居中。
- 在容器中水平居中。
我知道如何在 UILabel 上对齐文本。
但是这个问题有点有线。
所有其他对齐都有效,例如 NSTextAlignmentJustified
、NSTextAlignmentNatural
。只有 NSTextAlignmentCenter
不能使文本居中。
我的 UILabel 是使用 StoryBoard 插入的。
然后 UILabel 的文本格式在程序中实现为
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];
CGRect frame = cell.cellText.frame;
frame.size.width = cell.bounds.size.width;
frame.size.height = cell.bounds.size.height;
cell.cellText.frame = frame;
cell.cellText.font = [UIFont fontWithName:@"ArialMT" size:screenRect.size.height*0.0163];
cell.cellText.textAlignment = NSTextAlignmentCenter;
cell.cellText.lineBreakMode = NSLineBreakByWordWrapping;
cell.cellText.numberOfLines = 0;
cell.cellText.clipsToBounds = YES;
cell.cellText.backgroundColor = [UIColor clearColor];
cell.cellText.textColor = [UIColor blackColor];
if(indexPath.section == 0){
cell.backgroundColor=[UIColor blackColor];
cell.cellText.textColor = [UIColor whiteColor];
if(indexPath.item == 0)
cell.cellText.text = @"Date";
else if(indexPath.item == 1)
cell.cellText.text = @"Age";
else if(indexPath.item == 2)
cell.cellText.text = @"Height (cm)";
else if(indexPath.item == 3)
cell.cellText.text = @"%le";
else if(indexPath.item == 4)
cell.cellText.text = @"Weight (kg)";
else if(indexPath.item == 5)
cell.cellText.text = @"%le";
}
else if(indexPath.section % 2 == 0 && indexPath.section != 0)
cell.backgroundColor=[UIColor grayColor];
else
cell.backgroundColor=[UIColor lightGrayColor];
return cell;
}
为什么不能如图所示居中对齐。
编辑: 我将 UILabel 的背景更改为
if(indexPath.section == 0){
cell.backgroundColor=[UIColor blackColor];
cell.cellText.textColor = [UIColor whiteColor];
cell.cellText.backgroundColor = [UIColor redColor];
if(indexPath.item == 0)
cell.cellText.text = @"Date";
else if(indexPath.item == 1)
cell.cellText.text = @"Age";
else if(indexPath.item == 2)
cell.cellText.text = @"Height (cm)";
else if(indexPath.item == 3)
cell.cellText.text = @"%le";
else if(indexPath.item == 4)
cell.cellText.text = @"Weight (kg)";
else if(indexPath.item == 5)
cell.cellText.text = @"%le";
}
更新后的图片是
不要使用框架来设置 cellText
的位置。单元格未在 collectionView:cellForItemAtIndexPath
中布局,因此框架将是错误的。该帧将是上次重复使用该单元格时的帧,这是完全合理的。
而是使用 AutoLayout 将 UILabel 约束到单元格的所有边缘。
替换这些行
CGRect frame = cell.cellText.frame;
frame.size.width = cell.bounds.size.width;
frame.size.height = cell.bounds.size.height;
cell.cellText.frame = frame;
使用此代码。
cell.cellText.center = cell.center;
CGRect frame = cell.cellText.frame;
frame.size.width = cell.bounds.size.width;
frame.size.height = cell.bounds.size.height;
cell.cellText.frame = frame;
如果你想使用自动布局,那么只需在你的标签上添加两个约束。
- 在容器中垂直居中。
- 在容器中水平居中。