我已tableView:indentationLevelForRowAtIndexPath在我的UITableViewController派生类中重写了该方法,如下所示:
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary* item = [self.projects objectAtIndex:indexPath.row];
int indentationLevel = [[item objectForKey:@"indent"] intValue];
DLog (@"Indentation Level for Row %d : %d", indexPath.row, indentationLevel);
return indentationLevel;
}
Run Code Online (Sandbox Code Playgroud)
我最初认为这没有被调用,但这是操作员错误(错误,我的),我没有定义符号DEBUG = 1.
然而,它被称为(对我!),这是日志输出:
-[RootViewController tableView:indentationLevelForRowAtIndexPath:] [Line 129] Indentation Level for Row 0 : 1
-[RootViewController tableView:indentationLevelForRowAtIndexPath:] [Line 129] Indentation Level for Row 1 : 1
-[RootViewController tableView:indentationLevelForRowAtIndexPath:] [Line 129] Indentation Level for Row 2 : 2
-[RootViewController tableView:indentationLevelForRowAtIndexPath:] [Line 129] Indentation Level for Row …Run Code Online (Sandbox Code Playgroud) 我的应用程序中有几个自定义UITableViewCells,主要由nibs定义.移动到iOS 8和Xcode 6时,左右边距不正确.这些单元格通常散布在具有默认单元格的表格视图中.
我做了一个示例项目,这是我正在谈论的保证金问题:

我能找到的唯一与此相关的是新物业layoutMargins.对于UITableViewCells,其值似乎会根据运行应用程序的设备而改变:
iPhone 6 and below - layoutMargin: {8, 16, 8, 16}
iPhone 6 Plus - layoutMargin: {8, 20, 8, 20}
Run Code Online (Sandbox Code Playgroud)
这似乎与我在标准单元格上看到的边缘对齐.但是,对于我的定制单元的内容是在细胞内contentView,它具有标准的UIView layoutMargin的{8, 8, 8, 8}.这意味着绑定到Container Margin的任何自动布局约束都会添加不正确的间距.
我发现解决这个问题的唯一方法是添加以下内容 cellForRowAtIndexPath:
cell.contentView.layoutMargins = cell.layoutMargins;
Run Code Online (Sandbox Code Playgroud)
这似乎不是一个非常好的解决方案(特别是因为我需要将它包装在iOS8的支票中以保持兼容性).
有没有人有任何想法?我觉得我必须遗漏一些东西.
我的目标是 iOS 7 和 8,我想消除下面这个 UITableView 中图像左侧出现的边距。如果解决方案简单/优雅,我什至愿意接受仅适用于 iOS 8 的解决方案。(我只能忍受 iOS 7 上的余量,因为它会消失)。

这就是我希望它看起来像的样子:

我已经阅读了 Stack Overflow 上的许多类似问题(例如这个),或者特定于分组 UITableViews 的问题(此处和此处),但似乎无法让任何问题正常工作。
例如,如果我尝试使用 contentInset 解决问题(SO 上的常见答案):
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.tableView.contentInset = UIEdgeInsetsMake(self.tableView.contentInset.top, -16, self.tableView.contentInset.bottom, self.tableView.contentInset.right);
self.tableView.separatorInset = UIEdgeInsetsMake(0, 33, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
然后我最终得到了桌面视图右侧的间隙:

我明白为什么会发生这种情况,整个表格视图刚刚移动,如“调试视图层次结构”屏幕中所示:

但是,我尝试调整 tableView 框架大小进行补偿,但它似乎永远无法正常工作。另外,这看起来很老套;一定会有更好的办法。
作为记录,这是我的 cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get a cell that we can use]
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"VideoCell" forIndexPath:indexPath];
cell.textLabel.numberOfLines = 0; …Run Code Online (Sandbox Code Playgroud)