我有一个关于 UITableView 的问题......我有一个 UITableViewController 并且我创建了一个自定义单元格。当我可视化 tableView 时,我看到分隔线之前有一点空白,如您在此屏幕截图中看到的那样:
为什么?它是默认可视化吗?我可以改变一些东西来删除这个白色的左边填充吗?
我有一个关于 UITableView 的问题......我有一个 UITableViewController 并且我创建了一个自定义单元格。当我可视化 tableView 时,我看到分隔线之前有一点空白,如您在此屏幕截图中看到的那样:
为什么?它是默认可视化吗?我可以改变一些东西来删除这个白色的左边填充吗?
iOS 7 中默认提供前导空格,即使对于自定义单元格也是如此。
签出 UITableviewCell 的此属性separatorInset
以在单元格的行分隔符的任一端删除/添加白色间距。
// 删除空格
cell.separatorInset = UIEdgeInsetsZero;
或者,在 UITableView 级别,您可以使用此属性 -
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { // Safety check for below iOS 7
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
-(void)viewDidLayoutSubviews
{
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
或者,您也可以在界面生成器 (IB) 中进行编辑:
这与@Ashok 的答案具有相同的效果,但不需要编写任何代码。
更新适用于 iOS 7 和 8
在 iOS 9 上更新作品
使用下面的代码删除 UITableView 中不需要的填充。它适用于 IOS 8 和 7
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([tableView respondsToSelector:@selector(setSeparatorInset:)])
{
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([tableView respondsToSelector:@selector(setLayoutMargins:)])
{
[tableView setLayoutMargins:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)])
{
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
没有空白!我对此输入了一个错误,Apple 只是将其关闭为“不是错误”,但告诉我为什么它不是错误。我编写了一个简单的项目,为应用程序中的每个可能视图设置颜色。我看到的是,这些像素的颜色实际上是单元格本身的背景颜色(不是 contentView!),正如 Apple 告诉我的那样。
cell.contentView.backgroundColor 为绿色,cell.background 颜色为红色(用 Pixie 拍摄):
最后,在没有分隔符的情况下,cell.contentView 完全填满了单元格。使用分隔符,底部有一个或两个像素的间隙。分隔符在插入时填充了大部分间隙,但随后单元格的一些像素会显示出来。
谜团已揭开!
编辑:似乎根据您配置情节提要的方式, contentView.backgroundColor 会“丢失”或设置为白色。如果您在提供细胞时过度使用它,您可以获得您想要的行为:
let cell = tableView.dequeueReusableCellWithIdentifier("FOO", forIndexPath: indexPath) as UITableViewCell
cell.backgroundColor = UIColor.redColor()
cell.contentView.backgroundColor = UIColor.greenColor()
cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.frame.size.width, 0)
if (cell.respondsToSelector("preservesSuperviewLayoutMargins")){
cell.layoutMargins = UIEdgeInsetsZero
cell.preservesSuperviewLayoutMargins = false
}
这个对我有用
谢谢
对于那些想要在 Swift 中保留 UIEdgeInsetSettings 并且不使用 Storyboard 的人:
之前:(默认行为)
添加以下代码:
tableView.separatorInset.right = tableView.separatorInset.left
这对我有用:
cell?.layoutMargins = UIEdgeInsetsZero;
cell?.preservesSuperviewLayoutMargins = false
这是 swift 3 及更高版本的 UITableViewCell 类的扩展
extension UITableViewCell
{
func removeSeparatorLeftPadding() -> Void
{
if self.responds(to: #selector(setter: separatorInset)) // Safety check
{
self.separatorInset = UIEdgeInsets.zero
}
if self.responds(to: #selector(setter: layoutMargins)) // Safety check
{
self.layoutMargins = UIEdgeInsets.zero
}
}
}
用法:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "menuCellID")!
// .. Your other code
cell.removeSeparatorLeftPadding()
return cell
}
希望这对某人有所帮助!
纳雷什。