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 indentation 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 love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With