中心alignmentUITableViewCell问题中的文本

我有点新的Objective-C和iPhone的开发,当我试图将表格中的文本居中时,我遇到了一个问题。 我search谷歌,但解决scheme是一个旧的SDK错误,已经修复,这些不适合我。

一些代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; } cell.textLabel.text = @"Please center me"; cell.textLabel.textAlignment = UITextAlignmentCenter; return cell; } 

以上不会使文字居中。

我也尝试了willDisplayCell方法:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.textLabel.textAlignment = UITextAlignmentCenter; } 

我已经尝试了一些旧的解决scheme:

 UILabel* label = [[[cell contentView] subviews] objectAtIndex:0]; label.textAlignment = UITextAlignmentCenter; return cell; 

这些都不影响文本alignment。 我已经用完了想法的任何帮助将不胜感激。

提前欢呼。

不知道它是否有助于解决您的特定问题,但是如果您使用initWithStyle:UITableViewCellStyleDefault ,则UITextAlignmentCenter不起作用initWithStyle:UITableViewCellStyleDefault

它不起作用,因为textLabel只是对于任何给定的文本而言需要的宽度。 (当设置为UITableViewCellStyleSubtitle样式时, UITableViewCell将标签移动到合适的位置)

您可以覆盖layoutSubviews,以确保标签始终填充单元格的整个宽度。

 - (void) layoutSubviews { [super layoutSubviews]; self.textLabel.frame = CGRectMake(0, self.textLabel.frame.origin.y, self.frame.size.width, self.textLabel.frame.size.height); self.detailTextLabel.frame = CGRectMake(0, self.detailTextLabel.frame.origin.y, self.frame.size.width, self.detailTextLabel.frame.size.height); } 

一定要保持高度/ y位置相同,因为只要detailTextLabel的文本是空的textLabel将被垂直居中。

当使用UITableViewCellStyleSubtitle时,这个黑客会将文本居中。 加载两个文本标签与您的string,然后在返回单元格之前执行此操作。 只要将自己的UILabel添加到每个单元格可能会更简单,但我决心find另一种方法…

 // UITableViewCellStyleSubtitle measured font sizes: 18 bold, 14 normal UIFont *font = [UIFont boldSystemFontOfSize:18]; // measured after the cell is rendered CGSize size = [cell.textLabel.text sizeWithFont:font]; CGSize spaceSize = [@" " sizeWithFont:font]; float excess_width = ( cell.frame.size.width - 16 ) - size.width; if ( cell.textLabel.text && spaceSize.width > 0 && excess_width > 0 ) { // sanity int spaces_needed = (excess_width/2.0)/spaceSize.width; NSString *pad = [@"" stringByPaddingToLength:spaces_needed withString:@" " startingAtIndex:0]; cell.textLabel.text = [pad stringByAppendingString:cell.textLabel.text]; // center the text } font = [UIFont systemFontOfSize:14]; // detail, measured size = [cell.detailTextLabel.text sizeWithFont:font]; spaceSize = [@" " sizeWithFont:font]; excess_width = ( cell.frame.size.width - 16 ) - size.width; if ( cell.detailTextLabel.text && spaceSize.width > 0 && excess_width > 0 ) { // sanity int spaces_needed = (excess_width/2.0)/spaceSize.width; NSString *pad = [@"" stringByPaddingToLength:spaces_needed withString:@" " startingAtIndex:0]; cell.detailTextLabel.text = [pad stringByAppendingString:cell.detailTextLabel.text]; // center the text } 

使用此代码:

 cell.textLabel.textAlignment = NSTextAlignmentCenter; 

上面的代码将工作。 不要使用UITextAlignmentCenter,不推荐使用。

CustomTableViewCell.m

 - (void)layoutSubviews { [super layoutSubviews]; self.textLabel.frame = CGRectMake(0, self.textLabel.frame.origin.y, self.contentView.frame.size.width, self.textLabel.frame.size.height); } 

在方法表中:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; } cell.textLabel.text = @"Title"; cell.textLabel.textAlignment = UITextAlignmentCenter; return cell; } 

如果需要,可以对self.detailTextLabel重复相同的事情

在相同的情况下,我创build了自定义标签的自定义UITableViewCell:

MCCenterTextCell.h文件:

 #import <UIKit/UIKit.h> @interface MCCenterTextCell : UITableViewCell @property (nonatomic, strong) UILabel *mainLabel; @end 

MCCenterTextCell.m文件:

  #import "MCCenterTextCell.h" @interface MCCenterTextCell() @end @implementation MCCenterTextCell - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { self.accessoryType = UITableViewCellAccessoryNone; self.selectionStyle = UITableViewCellSelectionStyleGray; _mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 5, 320, 30)]; _mainLabel.font = BOLD_FONT(13); _mainLabel.textAlignment = NSTextAlignmentCenter; [self.contentView addSubview:_mainLabel]; } return self; } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state } @end 

你可以使用代码来中心文本

cell.indentationLevel = 1;

cell.indentationWidth = [UIScreen mainScreen] .bounds.size.width / 2-10;

如果希望将文本向右alignment,我已经成功地调整了这里描述的解决scheme。

 cell.transform = CGAffineTransformMakeScale(-1.0, 1.0); cell.textLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0); cell.detailTextLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0);