如何去除 UITableView 中的缩进?

Posted

技术标签:

【中文标题】如何去除 UITableView 中的缩进?【英文标题】:How can remove indentation in UITableView? 【发布时间】:2014-04-06 06:36:16 【问题描述】:

首先,我是新手,我很可能忘记了一些非常简单的事情。

问题:

我正在制作一个应用程序,它在tableView 中显示来自 imgur.com 的随机图像。由于某种原因,所有单元格都缩进了少量,如下图所示。我在storyboard 中摆弄了许多设置,但没有解决这个问题。

这里是tableView的代码……

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
// Return the number of sections.
return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
// Return the number of rows in the section.
return (_images.count * 2);


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
UITableViewCell *cell = nil;

if (indexPath.row % 2 == 0) 
//content cell
    cell = [tableView dequeueReusableCellWithIdentifier:@"RandomImgurTableCell"];

    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:@"RandomImgurTableCell"];
    

    long row = [indexPath row] / 2;

    SDImageCache* myCache = [SDImageCache sharedImageCache];
    cell.imageView.image = [myCache imageFromDiskCacheForKey:_images[row]];


else if (indexPath.row % 2 == 1) 
//separator cell
    cell = [tableView dequeueReusableCellWithIdentifier:@"SeparatorCell"];

    if(cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                  reuseIdentifier:@"SeparatorCell"];
    

if (indexPath.row == (_images.count * 2) - 3) 
    [self checkToLoadMoreImages];
    NSLog(@"Hit bottom of table, getting more images");

return cell;

这是我的tableView 和单元格设置的图片...

【问题讨论】:

【参考方案1】:

为了消除缩进,您将分隔符插入设置为零。结果如下图所示。

在代码中

myTableView.separatorInset = UIEdgeInsetsZero

在界面生成器中

备注

如果单元格导致缩进,那么您可以将以下行添加到tableView:cellForRowAtIndexPath

cell.separatorInset = UIEdgeInsetsZero
cell.preservesSuperviewLayoutMargins = false
cell.layoutMargins = UIEdgeInsetsZero

如果您仍支持 ios 8 之前的版本,请参阅this answer 了解更多详情。

另见this Q&A。

【讨论】:

【参考方案2】:

调整分隔符插入应该可以解决这个问题。我相信从左到右默认是15px

【讨论】:

这删除了分隔符插入,但是单元格的内容仍然缩进。至少我是其中的一部分。感谢您的帮助!【参考方案3】:

如果您指的是水平缩进,那么您应该尝试以下操作:

    确保内容视图框架 x 原点位于 0:

    yourTableViewCell.contentView.frame = CGRectMake(0.0f, 0.0f, SOME_WIDTH, SOME_HEIGHT);

    您应该确保添加到UITableViewCell 的图像视图与其父级左边缘对齐。如果您使用自动布局而不是在界面生成器中执行此操作。否则:

    yourImageView.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;

    看到当图像被缩放时,它仍然是真实的视图框架:

    yourImageView.contentMode = UIViewContentModeScaleAspectFill;

    确保单元格的缩进为 0:

    yourTableViewCell.indentationLevel = 0;

如果这些都没有帮助,请设置断点并使用以下调试器命令之一检查单元格的子视图:

po [[UIWindow keyWindow] recursiveDescription]
po [yourTableViewCell recursiveDescription]

【讨论】:

【参考方案4】:

以上都不适合我,我发现了这个:

https://www.hackingwithswift.com/example-code/uikit/how-to-make-uitableviewcell-separators-go-edge-to-edge

你需要做两件事。首先,将这两行代码添加到您的 表视图控制器的 viewDidLoad() 方法:

tableView.layoutMargins = UIEdgeInsets.zero 
tableView.separatorInset = UIEdgeInsets.zero

现在查找您的 cellForRowAt 方法并添加:

cell.layoutMargins = UIEdgeInsets.zero

【讨论】:

以上是关于如何去除 UITableView 中的缩进?的主要内容,如果未能解决你的问题,请参考以下文章

去除easyui-layout中的缩进按钮

iOS:重新加载 UITableView 后滑动显示数据

iOS如何去除UITableView底部多余的分割线

iOS如何去除UITableView底部多余的分割线

在后台删除的数据导致 UITableView 中的索引超出范围崩溃

如何禁止UITableView的section停留(去除卡住的效果)