2009-08-20 86 views
7

我有一个使用-insertRowsAtIndexPaths:withRowAnimation插入到表中的数字行,我希望行从左侧缩进以区别于其余的单元格。 UITableViewCell的indentationLevel属性看起来正是我所需要的,但它似乎没有做任何事情。下面是我使用的设置缩进级别的代码(点语法不有所作为):indentationLevel属性似乎没有做任何事情?

[cell setIndentationWidth:10]; 
[cell setIndentationLevel:1]; 

是indentationLevel我想要的东西,或者我应该寻找其他地方?

回答

0

我读过的一切都表明你应该这样做。确保你没有在代码中使用相同的指针创建一个新的单元格(在设置缩进之后,但在绘制之前)。你有没有尝试将缩进设置为更大的东西,在屏幕上更明显(比如,100px而不是10)?

+0

当你说指针,你不是指标识符,是吗?我的单元格都是来自同一个类的对象,所以我想他们都是指向同一个对象的指针。但是,我的单元标识符基于完整的indexPath,因此对于每个单元格都是唯一的。尽管如此,缩进仍然没有快乐。 – JoBu1324 2009-08-21 23:24:01

+0

我已经确认在单元返回到操作系统进行显示之前,在单元格中设置了缩进级别和宽度。可能会出现什么问题? – JoBu1324 2009-08-21 23:31:31

1

你可能会在你的单元格中执行它的实现。 在

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     if (cell == nil) 
     { 
      cell = (UITableViewCell*)[[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cellType01"] autorelease]; 
      [cell setIndentationLevel:indexPath.row]; 
      [cell setIndentationWidth:10]; 
      cell.selectionStyle = UITableViewCellSelectionStyleNone; 
      // Tag the view 
      [[[cell subviews] objectAtIndex:0] setTag:111]; 
      UILabel* labelView = [[UILabel alloc] initWithFrame: CGRectMake(cell.indentationLevel*cell.indentationWidth, 0, 300, 20)]; 
     } 
    } 
14

indentationLevel和indentationWidth影响标准件为textLabel,detailTextLabel,和ImageView的的定位。它们不会影响contentView框架的来源。

如果您没有使用textLabel等(可能是因为定位iPhone OS 2),则需要手动处理缩进,如前面的答案所示。

1

我遇到了类似的问题与我的应用程序。我有一个UITableView不使用自定义单元格。我正在使用基本样式的UITableViewCell。在我的- (UITableViewCell *)tableView: cellForRowAtIndexPath:委托方法中,我设置了单元的indentationWidthindentationLevel。他们什么也没做。我甚至尝试修改- (NSInteger)tableView: indentationLevelForRowAtIndexPath:委托方法。没有。

最终的工作是怎样进入故事板并修改表格视图单元本身的属性。一旦我在那里设置缩进宽度,我就开始获得正确的缩进。 indentationLevel属性开始工作。即使是- (NSInteger)tableView: indentationLevelForRowAtIndexPath:也很有用。

基本上,它看起来像indentationWidth属性被忽略,赞成故事板中的“缩进宽度”。

这是在Xcode 5.0.2中定位iOS 7

3

这似乎是,如果你没有使用定制单元是一个错误的的iOS 7。

tableView:cellForRowAtIndexPath:范围内设置indentationLevelindentationWidth对于显示单元时的布局没有影响。

例如,请考虑下面的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    BOOL isIndented = indexPath.row % 2; 

    cell.textLabel.text = isIndented ? @"Indented" : @"Not indented"; 
    cell.indentationLevel = isIndented; 
} 

我没有足够的声誉张贴截图,但结果的iOS 6和iOS 7,这是使用的Xcode 5和iOS的之间是不同的7 SDK。

+0

您能提供任何解决方案或解决方法吗? – 2014-05-15 08:07:14

+2

解决方法是使用自定义单元格,即使它要模拟默认的单元格样式。只需创建UITableViewCell的新子类,并根据您是使用Storyboard或Nib文件,分别配置原型单元格或注册Nib文件以供您的单元格子类使用。 – Skyboat 2014-06-03 14:31:42

0

我知道这个问题是4岁,但如果你使用的UITableViewCell,的自定义子类是已经你已经将你的意见为contentView子视图确保你没有覆盖layoutSubviews你的手机。如果你是,你需要手动调整contentView的边界/中心或框架,在layoutSubviews