I have prepared a simple test project for my question at GitHub.
When using UITableViewCellStyleSubtitle type of cells (called Subtitle in Xcode Interface Builder) - for some reason the horizontal lines are not reaching the left side of the screen:
At the above screenshot you can see that the separator lines in "empty cells" are occupying the whole width just fine.
First I thought that the icons (size: 46 x 46 pixels) were not fitting into the cells and tried to increase the row height, but this does not help.
Also I have tried to set Custom Insets to Custom and there Left to 0 pixels (both for Table View and for MyCell), but there is still a gap on the left side:
Here the source code of my TableViewController.m:
- (void)viewDidLoad {
[super viewDidLoad];
self.items = [[NSMutableArray alloc] initWithArray:@[
@{@"title": @"Title 1", @"subtitle": @"Sub Title 1", @"icon": @"signal4.png"},
@{@"title": @"Title 2", @"subtitle": @"Sub Title 2", @"icon": @"signal1.png"},
@{@"title": @"Title 3", @"subtitle": @"Sub Title 3", @"icon": @"signal2.png"},
@{@"title": @"Title 4", @"subtitle": @"Sub Title 4", @"icon": @"signal3.png"}
]];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.items.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath];
NSDictionary* item = [self.items objectAtIndex:indexPath.row];
cell.textLabel.text = item[@"title"];
cell.detailTextLabel.text = item[@"subtitle"];
UIImage* icon = [UIImage imageNamed:item[@"icon"]];
[cell.imageView setImage:icon];
return cell;
}
UPDATE: The source code from this answer has helped me at the end: iOS 8 UITableView separator inset 0 not working
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Remove seperator inset
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
// Prevent the cell from inheriting the Table View's margin settings
if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
[cell setPreservesSuperviewLayoutMargins:NO];
}
// Explictly set your cell's layout margins
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
/*
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
// Force your tableview margins (this may be a bad idea)
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
}
*/