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