ios7中的UITableViewCell现在左右有间隙

Posted

技术标签:

【中文标题】ios7中的UITableViewCell现在左右有间隙【英文标题】:UITableViewCell in ios7 now has gaps on left and right 【发布时间】:2013-09-24 13:00:44 【问题描述】:

我有一个 UITableView,在 ios6 中,我的自定义单元格完全拉伸到屏幕的左侧和右侧。所以我在单元格左侧的方形图像很难贴在手机屏幕上。

但是,现在在 ios7 中,左侧出现了一个小间隙,因此图像现在远离侧面并与单元格内的文本略有重叠。

这似乎也发生在我现在在 ios7 中查看的其他应用程序中 - 所有应用程序的左侧和右侧都有间隙。

根据 Interface Builder,我的自定义单元格的大小设置为 320 - ios 7 并没有改变这一点吗?

【问题讨论】:

【参考方案1】:

iOS7 添加了separatorInset 属性。

尝试将此添加到您的UITableViewController

if ([self.tableView respondsToSelector:@selector(separatorInset)]) 
    [self.tableView setSeparatorInset:UIEdgeInsetsZero];

【讨论】:

我试过这个没有成功。我的表格视图是使用界面生成器制作的,我尝试将您的代码插入表格视图实现中的各个位置但没有成功(viewdidload、viewwillappear 等)。如果我能帮上忙,我真的不想进入子类化,所以我错过了关于你的方法的一些东西吗? 如果您使用的是界面生成器,则选择表格视图,进入属性检查器并在表格视图下找到标记为“分隔符插入”的选项,将下拉菜单从默认更改为自定义,然后将左值从 15 更改为 0。 这似乎会更改每个部分的插入标题,但不会更改表格单元格本身的标题。 不确定我是否理解...它应该使单元格分隔符从左到右一直延伸。如果您只是设置 UITableViewCell 的 textLabel 文本属性,那么它仍然会有缩进。您可以通过简单地创建一个新的文本标签并将其作为子视图添加到 UITableViewCell 的 contentView 来摆脱它。 我已经尝试了这两种解决方案(使用 setSeparatorInset 和 Interface Builder 的自定义插图),但在 iOS 7 和 iOS 8 中似乎都不适用于我。差距仍然存在。【参考方案2】:

我更喜欢自己制作分隔符。感觉比使用 tableview 设置更简单。只需将分隔符设置为 none,子类化您的单元格并在 init 中执行此操作。

-(id)initWithCoder:(NSCoder *)aDecoder
    self = [super initWithCoder:aDecoder];
    if(self)

        UIView *seperator = [[UIView alloc] init];
        [seperator setBackgroundColor:[UIColor blackColor]];
        seperator.frame = CGRectMake(0, self.bounds.size.height-1, self.bounds.size.width, 1);
        [seperator setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth];
        [self.contentView addSubview:seperator];

    
    return self;

【讨论】:

问题是,在视网膜显示器上,分隔符的厚度为 2px,而绘制的 UITableView 仍为 1px。我通过定义区分屏幕分辨率并绘制 0.5px 或 1px 线的逻辑来绕过这个限制,但这根本不是面向未来的。【参考方案3】:

这对我来说非常适合:

-(void)viewDidLayoutSubviews

    if ([self.Video_TableVIEW respondsToSelector:@selector(setSeparatorInset:)]) 
        [self.Video_TableVIEW setSeparatorInset:UIEdgeInsetsZero];
    

    if ([self.Video_TableVIEW respondsToSelector:@selector(setLayoutMargins:)]) 
        [self.Video_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];
    

【讨论】:

【参考方案4】:

将图像添加到cell.contentView 可以解决问题:

[cell.contentView addSubview:imgView];

这样您甚至不必介意separatorInset 属性。

【讨论】:

【参考方案5】:

对于那些在 c# 中使用 Xamarin/MonoTouch 的人

tableView.SeparatorInset = UIEdgeInsets.Zero;

【讨论】:

我不确定该评论的含义,但我相信我发布的代码是正确的,因为在 Xamarin 中这些属性已转换为字段,因此更易于使用。文档可以在docs.go-mono.com/…* 找到 我认为上面的评论没有意识到单声道是什么。 tableView.separatorInset = UIEdgeInsetsZero; 用于 obj-c tableView.SeparatorInset = UIEdgeInsets.Zero; 用于单声道!【参考方案6】:
 override func viewDidLoad() 
    super.viewDidLoad()

    tableView.cellLayoutMarginsFollowReadableWidth = false
 

【讨论】:

以上是关于ios7中的UITableViewCell现在左右有间隙的主要内容,如果未能解决你的问题,请参考以下文章

用作自定义 UITableViewCell 的 XIB 中的自定义按钮不响应点击(ios7)

iOS 8 中的 UITableViewCell 约束在 iOS7 中不起作用

iOS7 手机应用中的通话、邮件等图标放入UITableViewCell

扩展/收缩 UITableViewCell 高度不再适用于 iOS7

UITableViewCell drawInRect iOS7

iOS 7 - 我可以更改 UITableViewCell 中的删除按钮背景颜色吗?