Reputation: 796
Since updating to iOS 9, table view cell's in iPad landscape no longer stretch the full width of the table in my unit tests.
My test is a simple table that takes a snapshot at the end.
- (void)testTableSize{
UIViewController *viewController = [[UIViewController alloc] init];
UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(0,0,viewController.view.bounds.size.width, viewController.view.bounds.size.height) style:UITableViewStylePlain];
tableView.dataSource = self;
tableView.delegate = self;
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
[viewController.view addSubview:tableView];
ASCSnapshotVerifyViewiPad([viewController view]);
}
The cells are very simple for this example
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
cell.textLabel.backgroundColor = [UIColor blueColor]; // Demo purpose
cell.textLabel.backgroundColor = [UIColor yellowColor]; // Demo purpose
cell.textLabel.text = [NSString stringWithFormat:@"Cell %d", (int)indexPath.row];
return cell;
but my cell is drawn with a big margin on the left and right. Any idea why?
Upvotes: 15
Views: 3811
Reputation: 2446
hope this help you
// MARK: - TableView Delegates And Datasource Method -
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
// IOS 7
if(self.respondsToSelector(Selector("setSeparatorInset:"))){
self.separatorInset = UIEdgeInsetsZero
cell.separatorInset = UIEdgeInsetsZero
tableView.separatorInset = UIEdgeInsetsZero;
}
// OTHER
if(self.respondsToSelector(Selector("setPreservesSuperviewLayoutMargins:"))){
if #available(iOS 8.0, *) {
self.separatorInset = UIEdgeInsetsZero
cell.layoutMargins = UIEdgeInsetsZero;
cell.preservesSuperviewLayoutMargins = false
}
}
// iOS 8
if(self.respondsToSelector(Selector("setLayoutMargins:"))){
if #available(iOS 8.0, *) {
self.separatorInset = UIEdgeInsetsZero
cell.layoutMargins = UIEdgeInsetsZero
}
}
// iOS 9
if (self.respondsToSelector("setCellLayoutMarginsFollowReadableWidth:")){
if #available(iOS 9.0, *) {
self.cellLayoutMarginsFollowReadableWidth = false
}
}
}
Upvotes: -1
Reputation: 1827
When I tested my App with iOS9, I noticed huge margins, on some UITableViews, both left and right. After a bit of investigation, I found the following new method:
// iOS9
if([self.tableView respondsToSelector:@selector(setCellLayoutMarginsFollowReadableWidth:)]) {
self.tableView.cellLayoutMarginsFollowReadableWidth = NO;
}
When the above code is called, after instantiating your UITableView, it should remove them.
Paste this code after you set your tableView delegate.
Hope it helps.
Upvotes: 37