我希望我的UITableViewCell中的文本有点偏右。换句话说,我想要一个x偏移量。这甚至可能吗?我是否因此而需要创建自定义单元格?
答案 0 :(得分:107)
您可以使用cell.indentationLevel
,如果需要cell.indentationWidth
而不是自定义UITableViewCell。
答案 1 :(得分:31)
你可以试试这个:
[cell setIndentationLevel:SOME_NUMBER];
[cell setIndentationWidth:SOME_OTHER_NUMBER];
答案 2 :(得分:11)
一个简单的解决方案是你可以改变textLabel的框架。
CGRect textLabelFrame = cell.textLabel.frame;
textLabelFrame.origin.x += xOffset;
textLabelFrame.size.width -= xOffset;
cell.textLabel.frame = textLabelFrame;
我也是通过创建一个支持类似于UIButton的edgeInsets的自定义UILabel来完成的。这是一个更好的解决方案b / c您可以将标签布局为正确的尺寸,但如果您有简单的需求,上述方法将有效。
[编辑1/2:修正错字与CGRect]
[编辑3:固定拼写错误设置修改框架]
[编辑4:需要一个简单的子类]
Mea culpa。我错了,您可以在tableView:cellForRowAtIndexPath
中执行此操作。在tableView委托/数据源有机会自定义单元格之后,UITableViewCell布局发生。我已经测试了下面的实现,它可以工作。
如上所述,但创建一个UITableViewCell
的(简单)子类,在xOffset
中添加layoutSubviews
。如果您这样做,您还可以添加xOffset
属性,您可以在tableView:cellForRowAtIndexPath:
中设置该属性。
@implementation XOffsetCell
// assumes property xOffset is defined and synthesized
- (void) layoutSubviews
{
[super layoutSubviews];
CGRect textLabelFrame = cell.textLabel.frame;
textLabelFrame.origin.x += self.xOffset;
textLabelFrame.size.width -= self.xOffset;
cell.textLabel.frame = textLabelFrame;
}
@end
建议向UILabel
添加自定义cell.contentView
的解决方案也是一个很好的解决方案。我看到你的评论它掩盖了内置的textLabel
,但这就是重点。您不再使用内置标签,而是使用自定义标签。
答案 3 :(得分:5)
我不是为了投票,而是想表明@iPhone怪物提供的代码应该是什么样子。他的解决方案是有效的选择。如果您在if (cell == nil)
之后将标签添加到单元格中,那么您将不断向出列单元格添加标签。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(50.0f, 10.0f, 150.0f, 20.0f)];
lbl.tag = OffsetLabelTag; // define this as a constant
[cell.contentView addSubview:lbl];
[lbl release];
}
UILabel *lbl = (UILabel *)[cell.contentView viewWithTag:OffsetLabelTag];
[lbl setText:@"test text"];
return cell;
}
答案 4 :(得分:4)
您可以使用Autolayouts执行此操作:
UITableViewCell* cell = [UITableViewCell new];
cell.textLabel.translatesAutoresizingMaskIntoConstraints = NO;
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(indentation)-[textLabel]-(indentation)-|"
options:0
metrics:@{@"indentation": @35}
views:@{@"textLabel": cell.textLabel}]];
或使用Parus lib:
[cell.contentView addConstraints:(PVVFL(@"H:|-(indentation)-[textLabel]-(indentation)-|")
.withViews(@{@"textLabel": textLabel})
.metrics(@{@"indentation": @35}).asArray)];
答案 5 :(得分:3)
其他方式:
-(NSInteger)tableView:(UITableView *)tableView
indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
{
return intOffset; // but is like '\t', not points
}
答案 6 :(得分:0)
还有另一种不太漂亮和聪明的方法:)TableViewCell中Label的位置取决于分配给cell.imageView.image属性的图像大小。因此,如果您希望文本向右移动,则可以在单元格中添加几个空白像素列。
答案 7 :(得分:0)
基于 https://stackoverflow.com/a/5659826/1058199,这是一个 Swift 版本。
这在单元格内仅用于将 textLabel 向右移动。斯威夫特 5.4
override func layoutSubviews() {
super.layoutSubviews()
var textLabelFrame = self.textLabel?.frame
textLabelFrame?.origin.x += 32
textLabelFrame?.size.width -= 32
self.textLabel?.frame = textLabelFrame ?? CGRect.zero
}
答案 8 :(得分:-4)
cell.textLabel.textAlignment = UITextAlignmentCenter;
对您来说是否足够。它可以将文本与中心对齐,为您创建空间