I've made a UITableView with cells which have different height. On each cell, I've attached an accessoryView (UIImageView).
Depending on the height of the cell, the accessoryType position is different (see attached image). How can I correct it ?
It seems to be normal in any table view. No answers found.
Thanks for your help. http://i.stack.imgur.com/kKOn0.png
UPDATE : My cellForRowAtIndexPath:
NSDictionary *currentTime = [listOfTimes objectAtIndex:indexPath.row];
UITableViewCell *cell;
if([[currentTime objectForKey:@"freq"] intValue] > 0) cell = [self getCellFreqContentView:@"CellFreq"];
else cell = [self getCellContentView:@"Cell"];
[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterNoStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
UILabel *lblTemp1 = (UILabel *)[cell viewWithTag:1];
UILabel *lblTemp2 = (UILabel *)[cell viewWithTag:2];
if([[currentTime objectForKey:@"freq"] intValue] > 0) {
lblTemp1.text = [NSString stringWithFormat:@"%@\n\n%@", [dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceReferenceDate:[[currentTime objectForKey:@"arrival_time_seconds"] doubleValue]]],[dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceReferenceDate:[[currentTime objectForKey:@"departure_time_seconds"] doubleValue]]]];
UILabel *lblTemp3 = (UILabel *)[cell viewWithTag:3];
UILabel *lblTemp4 = (UILabel *)[cell viewWithTag:4];
lblTemp3.text = @"↓";
lblTemp4.text = [NSString stringWithFormat:NSLocalizedString(@"A pass every %i minutes", nil), [[currentTime objectForKey:@"freq"] intValue]/60];
} else {
lblTemp1.text = [dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceReferenceDate:[[currentTime objectForKey:@"departure_time_seconds"] doubleValue]]];
}
lblTemp2.text = [currentTime objectForKey:@"trip_headsign"];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UIView *vv = [[UIView alloc] initWithFrame:cell.frame];
if(indexPath.row == [ScheduleManager getRowForTime:listOfTimes] && isCurrentPeriod == TRUE) {
vv.backgroundColor = [BKColor colorWithHexString:@"54B8BB"];
}
// SPECIAL CASES
if([[currentTime valueForKey:@"runoff"] count] > 0 && useExceptions == TRUE) {
// ACCESSORY
cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"times-special.png"]];
}
cell.backgroundView = vv;
return cell;
}
I think the accessoryView is positioned so that the distance from the right, top, and bottom edges is correlated in some way, so you have to reposition it.
Probably the best way is to subclass UITableViewCell, and override the layoutSubviews method:
- (void)layoutSubviews {
[super layoutSubviews];
CGRect accessoryFrame = self.accessoryView.frame;
accessoryFrame.origin.x = <desired position here>;
self.accessoryView.frame = accessoryFrame;
}
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