首先,一些信息表是如何工作的:
UITableView
有背景。这就是你在细胞后面看到的。
- 每个单元格都有三个特殊视图:
contentView
、backgroundView
、selectedBackgroundView
。
- 显示在单元格内容的
backgroundView
下方,当单元格被选中时,selectedBackgroundView
会被使用。
- 通常,您的所有内容都应该转到
contentsView
. 背景与内容的分离使表格能够正确地为未选择/选择的过渡设置动画。当单元格进入编辑模式时也很重要 - 内容被缩小/移动并且编辑控件(例如删除按钮或单元格选择)可以独立显示在内容上。
- 单元格还直接包含分隔视图(通常在单元格底部有 1 或 2px 高的视图,具体取决于
separatorStyle
)。这就是为什么单元格总是比它的contentsView
.
其次,关于分组表如何工作的一些信息。
- 该表具有特殊的默认背景。您可以使用
backgroundView
和删除/更改它backgroundColor
。
- 分组表视图中的单元格具有较小的
contentView
. 该单元格的宽度仍与整个表格相同,但在contentView
左侧和右侧有一个偏移量(在 iPhone 上大约为 10 个点)。
- 已
backgroundView
修改并包括绘制边界的图层,具体取决于单元格位置(第一个、最后一个和中间单元格不同)。边框具有表格指定的颜色separatorColor
。
一切都可以在您的代码中进行修改!
如何删除边框的最简单方法之一是设置separatorColor
为[UIColor clearColor]
. 这将删除单元格分隔符,但您可以添加自己的分隔符,例如
cell = ...
UIView* separator = [[UIView alloc] init];
separator.backgroundColor = ...
separator.frame = CGRectMake(0.0f, table.bounds.size.width, table.rowHeight - 1.0f, 1.0f);
separator.autoresizingMask = (UIViewAutoresizingMaskFlexibleTopMargin | UIViewAutoresizingMaskFlexibleWidth);
[cell addSubview:separator]; //note we are adding it directly to the cell, not to contentsView
您还可以使用图像 ( UIImageView
) 作为分隔符,而不是单色视图。
另一种方法是为每个单元格设置backgroundView
为。nil
实际上,您可以完全忽略contentsView
并直接将所有内容添加到单元格中。然后,您可以自定义以下单元格方法以在其状态更改时更新您的单元格。
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
//update the cell text colors, backgrounds etc for the selected/not selected state
//you don't have to call super
// (the default implementation changes between backgroundView and selectedBackgroundView)
}
- (void)setHighlighted:(BOOL)highlited animated:(BOOL)animated {
//update the cell text colors, backgrounds etc for the selected/not highlighted state
//you don't have to call super
// (the default implementation changes between backgroundView and selectedBackgroundView)
//by giving empty implementation, you will block highlighting of cells
}
- (void)setEditing:(BOOL)highlited animated:(BOOL)animated {
//you can use this method to add custom editing controls
}
- (void)willTransitionToState:(UITableViewCellStateMask)state {
//use this method to change the layout of your contents
//when the cells goes into one of the editing states
}
- (void)layoutSubviews {
//update the frames of cell contents to match the new cell size
//note that the cell doesn't have the correct size until it is added to the table,
//this method is called when the cell already has the final size
//you can also use this method to change the size/position of the `contentsView`
}
编辑:
为了解决您的具体问题,最好的解决方案可能是:
- 从表格中删除默认值
backgroundView
并补充您自己的背景(例如,清晰的颜色、白色、从图案创建的颜色或 aUIImageView
到backgroundView
.
- 从每个单元格中删除默认值
backgroundView
并将其替换为UIImageView
. 第一个、最后一个和中间单元格需要三个特殊图像。