我对UITableView有疑问... 我有一个UITableViewController,我创建了一个自定义单元格。 当我可视化tableView时,我会在分隔线前看到一个小空格,如您可以在此屏幕截图中看到的那样:
为什么呢?这是默认的可视化? 我可以更改一些东西来移除这个白色的左边填充物吗?
答案 0 :(得分:89)
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];
}
}
答案 1 :(得分:33)
或者,您也可以在界面构建器(IB)中编辑它:
这与@Ashok的答案具有相同的效果,但不需要编写任何代码。
更新适用于iOS 7和8
更新适用于iOS 9
答案 2 :(得分:16)
使用以下代码删除UITableView中不需要的填充。它适用于IOS 8和IOS。 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];
}
}
答案 3 :(得分:10)
没有空白区域!我输入了一个错误,苹果公司刚刚将其关闭为#34;而不是一个错误",但告诉我为什么它不是一个错误。我写了一个simple project,为应用中的每个可能的视图设置颜色。我看到的是那些像素的颜色实际上是细胞本身的背景颜色(而不是contentsView!),正如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()
答案 4 :(得分:9)
cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.frame.size.width, 0)
if (cell.respondsToSelector("preservesSuperviewLayoutMargins")){
cell.layoutMargins = UIEdgeInsetsZero
cell.preservesSuperviewLayoutMargins = false
}
这个对我有用
由于
答案 5 :(得分:7)
这对我有用:
cell?.layoutMargins = UIEdgeInsetsZero;
cell?.preservesSuperviewLayoutMargins = false
答案 6 :(得分:5)
对于那些想要在Swift中保留UIEdgeInsetSetting并且不使用Storyboard的人:
之前:(默认行为)
添加以下代码:
tableView.separatorInset.right = tableView.separatorInset.left
答案 7 :(得分:0)
这是swift 3& UIT的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
}
希望这有助于一个人!
纳雷什。