如何去除 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 中的缩进?的主要内容,如果未能解决你的问题,请参考以下文章