我添加了一个tableView并将一个表格视图单元格拖入其中。 在实用工具面板中,我将样式更改为副标题。 我也尝试在代码中更改它:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
cell.textLabel.textAlignment = UITextAlignmentCenter;
cell.detailTextLabel.textAlignment = UITextAlignmentCenter;
cell.textLabel.text = [myArray objectAtIndex:indexPath.row];
cell.detailTextLabel.text = [myArray2 objectAtIndex:indexPath.row];
return cell;
中心对齐不起作用!
我尝试在单元格中添加标签对象以获得解决方法。但我不知道如何访问它。即使我为它指定了一个插座,这也行不通:
cell.labelForCell....
我该怎么办? 有关如何使其按常规方式工作的任何建议,而不向单元格添加标签或其他什么?
答案 0 :(得分:18)
对于UITableViewCellStyleSubtitle
文本对齐无法更改
你必须放一个标签并添加你的对齐方式,
为此,您可以使用此代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *myLabel;
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
myLabel = [[UILabel alloc] initWithFrame:Your_Frame];
//Add a tag to it in order to find it later
myLabel.tag = 111;
//Align it
myLabel.textAlignment= UITextAlignmentCenter;
[cell.contentView addSubview:myLabel];
}
myLabel = (UILabel*)[cell.contentView viewWithTag:111];
//Add text to it
myLabel.text = [myArray objectAtIndex:indexPath.row];
return cell;
}
答案 1 :(得分:1)
字幕样式的问题在于它在布局时会执行[self.textLabel sizeToFit]。当您居中于容器内容的完美尺寸时,没有任何变化。
试试这个。在UITableViewCell的子类中,设置textAlignment,并将其用作layoutSubviews代码:
- (void)layoutSubviews
{
[super layoutSubviews];
{
CGRect frame = self.textLabel.frame;
frame.size.width = CGRectGetWidth(self.frame);
frame.origin.x = 0.0;
self.textLabel.frame = frame;
}
{
CGRect frame = self.detailTextLabel.frame;
frame.size.width = CGRectGetWidth(self.frame);
frame.origin.x = 0.0;
self.detailTextLabel.frame = frame;
}
}
这使textLabel的框架全宽,从而使居中效果更加明显。
注意:由于这会覆盖layoutSubviews,因此会产生性能成本,因为它会经常调用。
答案 2 :(得分:1)
您好,请添加以下内容而不是您的代码,
cell.textLabel.textAlignment = UITextAlignmentCenter;
cell.detailTextLabel.textAlignment = UITextAlignmentCenter;
更改为
cell.textLabel.textAlignment = NSTextAlignmentCenter;
cell.detailTextLabel.textAlignment = NSTextAlignmentCenter;
它会正常工作。
答案 3 :(得分:0)
我认为原因是:textLabel的宽度取决于文本长度,如果文本太长而无法在信号行中显示全部,并且您已经设置了换行模式并将行数设置为0 ,你会发现文本对齐将起作用。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"identifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (nil == cell)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier] autorelease];
cell.textLabel.textAlignment = UITextAlignmentLeft;
cell.textLabel.textColor = [UIColor redColor];
cell.detailTextLabel.textColor = [UIColor greenColor];
cell.detailTextLabel.textAlignment = UITextAlignmentCenter;
cell.textLabel.lineBreakMode = UILineBreakModeTailTruncation;
cell.textLabel.numberOfLines = 0;
}
cell.textLabel.text = [NSString stringWithFormat:@"You can initialize a very long string for the textLabel, or you can set the font to be a large number to make sure that the text cann't be shown in a singal line totally:%d", indexPath.row];
return cell;
}
答案 4 :(得分:0)
我认为调整框架会起作用。我有UITableViewCellStyleValue2的样式但是如果我在textLabel中有一个有点冗长的文本,它会在尾部被截断而textAlignment在这里不起作用,所以想到增加textLabel的宽度。
-(void)layoutSubviews{
[super layoutSubviews];
if ([self.reuseIdentifier isEqualToString:@"FooterCell"]) {
CGRect aTframe = self.textLabel.frame;
aTframe.size.width += 40;
self.textLabel.frame = aTframe;
CGRect adTframe = self.detailTextLabel.frame;
adTframe.origin.x += 70;
self.detailTextLabel.frame = adTframe;
}
}
答案 5 :(得分:0)
在 UITableViewCell 中更改 textLabel 和 detailTextLabel 的框架是不可能的 在cellForRowAtIndexPath:方法中。
如果您不想将您的单元格子类化,则可以使用
实现小型黑客攻击performSelector:withObject:afterDelay:
在默认layoutSubviews 之后立即更改几何图形的延迟为零:
[self performSelector:@selector(alignText:) withObject:cell afterDelay:0.0];
详情请见here