indentationLevel属性似乎没有做任何事情?

时间:2009-08-20 01:35:10

标签: objective-c iphone

我正在使用-insertRowsAtIndexPaths:withRowAnimation将一些数字插入到表中,我希望从左侧缩进行以将它们与其余单元格区分开来。 UITableViewCell的indentationLevel属性看起来就像我需要的那样,但似乎没有做任何事情。这是我用来设置缩进级别的代码(点语法没有区别):

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

缩进级别是我想要的,还是应该在其他地方寻找?

6 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:3)

如果您不使用自定义单元格,这似乎是iOS 7中的错误。

indentationLevel内设置indentationWidthtableView:cellForRowAtIndexPath:对单元格的布局没有影响。

例如,请考虑以下代码:

- (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。

答案 2 :(得分: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)]; 
        }
   }

答案 3 :(得分:1)

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

最终工作是什么才能进入故事板并修改表视图单元本身的属性。一旦我在那里设置了缩进宽度,我开始得到适当的缩进。 indentationLevel属性开始起作用。即使- (NSInteger)tableView: indentationLevelForRowAtIndexPath:也很有用。

基本上,看起来indentationWidth属性被忽略,而有利于故事板中的“缩进宽度”。

这是针对iOS 7的Xcode 5.0.2。

答案 4 :(得分:0)

我读过的所有内容都表明你应该如何做到这一点。确保您之后没有在代码中创建具有相同指针的新单元格(在设置缩进之后,但在绘制之前)。您是否尝试将缩进设置为更大的屏幕(例如,100px而非10)?

答案 5 :(得分:0)

我知道这个问题已有4年了,但如果您已经使用UITableViewCell的自定义子类,您已经将视图添加为子视图contentView的{​​{1}}确保您未在​​您的单元格中覆盖layoutSubviews。如果您是,则需要在layoutSubviews中手动调整contentView的边界/中心或框架。