代码之家  ›  专栏  ›  技术社区  ›  Daniel

无法缩进UITableViewCell子类

  •  8
  • Daniel  · 技术社区  · 14 年前

        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;
        }
    

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

    有什么提示吗?

    3 回复  |  直到 14 年前
        1
  •  21
  •   Daniel    10 年前

    iOS 8更新:

    考虑创建一个AutoLayout约束来表示缩进左边距

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

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

    基于vodkhang的建议,我在UITableViewCell子类中实现了以下解决方案。不确定这是否是最好的解决方案,但它似乎工作良好。

    - (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);
    }
    
        2
  •  1
  •   vodkhang    14 年前

    – tableView:heightForRowAtIndexPath: )如果自定义UITableViewCell已经指定了UITableViewCell,则对UITableViewCell不起作用

        3
  •  0
  •   Peter DeWeese    14 年前

    如果在xib中设计UITableViewCell,则将使用customView单元格属性,该属性不会自动使用缩进。您可以将UITableViewCell子类化并实现layoutSubviews以基于缩进更改框架,也可以在表委托或数据源中配置单元格的任何位置执行相同的操作。我希望苹果能实现定制单元格的缩进。