UITableViewCell 标签不需要的缩进
Posted
技术标签:
【中文标题】UITableViewCell 标签不需要的缩进【英文标题】:UITableViewCell labels unwanted indentation 【发布时间】:2014-10-07 13:31:51 【问题描述】:我刚刚更新了一个 Objective-C ios 应用程序以使用“新”的 iOS 8 故事板。更新所有约束后,我注意到在滚动时,一些标题标签(自定义单元格)似乎缩进,这不是我想要他们做的。当我改变滚动方向时,它似乎总是发生,但我不完全确定如何重现它。我不知道在哪里寻找解决方案,但我很确定它与约束没有任何关系。下面是一些细胞的图片。前两个缩进正确,后两个不缩进。
我可以做些什么来防止这种缩进?
【问题讨论】:
贴一些代码,没有代码很难帮你 试试这个,***.com/a/19499442/691626 【参考方案1】:在您的 cellForRowAtIndexPath
方法中,您可以改为在单元格上添加一个标签,作为带有自定义文本的子视图。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] init];
UILabel *title = [[UILabel alloc] init];
title.text = @"my text";
title.frame = CGRectMake(0,0,desiredWidth,rowHeight); // setting the origin at (0,0) should position the label over that indentation you don't want
[titleview addSubview:title];
return cell;
【讨论】:
【参考方案2】:我也遇到了这个问题,做了一些研究。
要重现它,您似乎需要一个自定义表格视图单元格,该单元格使用自动布局来布置其子视图。当滚动表格视图并且更改滚动方向并且受影响的单元格移出可见屏幕并随后再次返回视图时,会发生缩进,而在方向更改期间手指没有从屏幕上抬起。
明显的第一个嫌疑人是细胞重复使用。像这样在自定义单元实现中覆盖 prepareForReuse 似乎可以解决问题:
-(void)prepareForReuse
[super prepareForReuse];
[self layoutSubviews];
问题是这是否是一个错误。当单元格排队等待重用时,似乎确实发生了某些事情使自动布局约束无效。进一步的研究(断点、NSLog 等)表明所有布局约束都保持在正确的位置。由此得出layoutSubviews可能解决问题的结论,事实证明是这样的。
这是一个错误吗?也许不吧。 The docs for prepareForReuse说:
出于性能原因,您应该只重置与内容无关的单元格属性,例如 alpha、编辑和选择状态。 tableView:cellForRowAtIndexPath 中的表格视图委托:在重用单元格时应始终重置所有内容。
因此,对此的严格解释是,当涉及自动布局时,您可能必须通过从那里调用单元格上的 layoutSubviews 在 tableView:cellForRowAtIndexPath: 中重新布局,因为自动布局约束是 部分内容。这似乎也表明 prepareForReuse 可能不是重新布局的预期位置。无论如何,这两种方式似乎都可以完成工作,如果有人知道更多关于哪种方式更好的细节,请随时发表评论。
【讨论】:
【参考方案3】:您是否正在以编程方式更改视图框架或其他一些 UI?
如果您使用自动布局并以编程方式更改视图,有时会发生这种情况。
【讨论】:
不,我不是。我只是使用约束来定位我的视图。 好的。请发布您编写的部分代码。还请指定您添加了哪些约束。我尝试了仅带有标签和自动布局的自定义 tableviewcell。它工作正常。以上是关于UITableViewCell 标签不需要的缩进的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 UITableViewCell 中的缩进 contentView 而不是 textLabel