2010-09-15 60 views
8

我有子类UITableViewCell创建一个按钮和2个标签的自定义单元格。单元定义是使用Dave Mark的Beginning iPhone Development中概述的模式从xib加载的。这里的基本代码:无法缩进UITableViewCell子类

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MarketItemCustomCell" owner:self options:nil]; 

    for (id oneObject in nib) 
    { 
     if ([oneObject isKindOfClass:[MarketItemCustomCell class]]) 
     { 
      cell = (MarketItemCustomCell *)oneObject; 
      break; 
     } 
    } 

标签和按钮显示为预期,但缩进级别的不尊重。我已经实现了如下所示的indentationLevelForRowAtIndexPath,但是单元仍然一直对齐到左边。

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     <snip/> 
     return 5; 
    } 

请注意,缩进级别工作正常,当我不使用自定义单元格。

任何提示?

回答

21

更新为iOS 8不会在UITableViewCell中的情况下影响:下面的代码不再适用于某些原因

为iOS 8备选建议:

考虑创建一个自动版式约束来表示缩进左边距

在运行时,修改此约束,以改变缩进级别

如果你有一个自定义的UITableViewCell子类,这个子类可以有一个IBOutlet映射到约束。 (不幸的是Apple没有提供findConstraintByTag/Id函数)

可以修改NSLayoutConstraint的具有讽刺意味的名称“constant”属性来更改缩进级别。

对于iOS 7,这个工作(但不应该再推荐)

基于vodkhang的建议下,我实现了我的UITableViewCell sublass以下解决方案。不知道这是否是最好的解决方案,但它似乎工作正常。

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    float indentPoints = self.indentationLevel * self.indentationWidth; 

    self.contentView.frame = CGRectMake(indentPoints, 
              self.contentView.frame.origin.y, 
              self.contentView.frame.size.width - indentPoints, 
              self.contentView.frame.size.height); 
} 
+0

这完美的作品! – Nathan 2010-10-07 02:23:53

+1

缩进内容视图非常棒 - 谢谢!如何缩进单元格本身?我想我会从上面删除contentView,并看看indentationLevel是不是0,但看起来很痒。 – 2012-06-26 15:17:39

+3

上面的代码挂在iOS8上 – Gerry 2014-09-03 18:39:47

1

我认为你需要自定义UITableViewCell中的缩进级别。我想这个方法(和喜欢– tableView:heightForRowAtIndexPath:方法)如果您的自定义的UITableViewCell已经规定它

0

如果您在厦门国际银行设计的UITableViewCell,你将使用customView单元属性,它不会自动使用缩进。您可以继承UITableViewCell并实现layoutSubviews以基于缩进来更改框架,或者您可以在您的表代表或数据源中配置单元格的位置执行相同的操作。我希望Apple为自定义单元格实施缩进。