Can't indent UITableViewCell subclass
I have subclassed UITableViewCell to create a custom cell with a button and 2 labels. The cell definition is loaded from a xib using the pattern outlined in Dave Mark's Beginning iPhone Development. Here's the essential code:
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MarketItemCustomCell" owner:self options:nil];
for (id oneObject in nib)
{
if ([oneObject isKindOfClass:[MarketItemCustomCell class]])
{
cell = (MarketItemCustomCell *)oneObject;
break;
}
}
The labels and button display as expected but the indentation level is not respected. I have implemented indentationLevelForRowAtIndexPath like below, but the cell is still aligned all the way to the left.
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
{
<snip/>
return 5;
}
Note that the indentati开发者_高级运维on level works fine when I'm not using a custom cell.
Any hints?
Update for iOS 8: The code below no longer works for some reason
Alternate suggestion for iOS 8:
Consider creating an AutoLayout constraint to represent the indenting left margin
At runtime, modify this constraint to change the indent level
If you have a custom UITableViewCell subclass, this subclass can have an IBOutlet mapped to the constraint. (Unfortunately Apple did not provide a findConstraintByTag/Id function)
The ironically named "constant" property of the NSLayoutConstraint can be modified to change the indent level.
For iOS 7, this works (but should no longer be recommended)
Based on vodkhang's suggestion, I implemented the following solution in my UITableViewCell sublass. Not sure if this is the best solution but it appears to work fine.
- (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);
}
I think that you need to customize the indentation level in your custom UITableViewCell. I guess this method (and methods like – tableView:heightForRowAtIndexPath:
) will not affect in the case of UITableViewCell if your custom UITableViewCell already specified it
If you design a UITableViewCell in a xib, you'll be using the customView cell property, which does not utilize indentation automatically. You can subclass UITableViewCell and implement layoutSubviews to change your frame based on indentation or you can do the same from wherever you configure your cells in your table delegate or datasource. I wish that Apple implemented indentation for custom cells.
精彩评论