iPhone 6 Plus的tableView.separatorInset出了问题

13

我们的 iPhone 6 Plus 表格视图单元格分隔符似乎出了问题。我创建了一个空的测试项目,其中包含一个自定义单元格,仅具有一个标签和与前缘的 15pt 约束。

iPhone 5S

标签和分隔符距离前缘都是 30 像素(15pt),一切正常。

iPhone 5S

iPhone 6 Plus

标签距离前缘 48 像素(15pt),而分隔符距离前缘 60 像素(20pt)。

iPhone 6 Plus

如果打印 tableView.separatorInset,则 iPhone 5S 上为 15pt,iPhone 6 Plus 上为 20pt。在 6 Plus 上手动将缩进设置为 15 不起作用。

请提供帮助。


我遇到了同样的问题,即使在最近的iOS 8.1.1更新后仍然如此。奇怪的是,这只发生在自定义样式的表视图单元格上。 - zgosalvez
在iPad上尝试了一下,也发生了这种情况。 - zgosalvez
有找到任何解决方案吗?我也遇到了同样的问题。 - Sam
5个回答

6
在您的自定义单元格类中覆盖layoutMargins方法。
 - (UIEdgeInsets)layoutMargins
{
    return UIEdgeInsetsMake(0, 15, 0, 0);
}

有没有更好的方法来完成这个任务,而不需要硬编码数字? - Sam
更好的方法是禁用分隔符并添加自定义视图作为分隔符。 - Vidyalaxmi
要了解正确的方法,请查看此帖子。之所以这是正确的方法,是因为它尊重像6 Plus或iPad这样更大设备的较大左边距。苹果将边距设置得更大是有原因的,这样看起来更好,应用程序也应该尊重这一点。 - Eric

2
如果您正在使用Storyboard,请选择Table View属性检查器。将分隔符插入更改为自定义,并将默认左边距保留为15。

对于IOS 9,这个解决方案对我很有效。我使用了一个包含标签的自定义单元格,并将其与前缘保持15pt的约束。这个15pt的约束在所有iPhone上都很好用,但是在iPhone 6+和iPad上却不行(标签与tableview的分隔符插图不对齐)。不过这个解决方案解决了这个问题。谢谢! - xNightxOwl
也适用于iOS 8。对我来说是最简单的解决方案。 - Tuslareb

1
不是完美的解决方案,但对我有用。
@IBOutlet weak var leftViewLeadingConstraint: NSLayoutConstraint!

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    switch UIScreen.mainScreen().scale {
    case 2:
        leftViewLeadingConstraint.constant = 7.0
    case 3:
        leftViewLeadingConstraint.constant = 11.0
    default:
        assertionFailure("Error: wrong scale value")
    }
}

我不知道为什么这个答案没有得到票。它对我完美地起作用了!如果比例为3,我在我的UITableViewCell子类的layoutSubviews方法中调整了前沿约束,并且在Storyboard中,如果尺寸类是正常宽度x任何高度,则将前沿约束的值指定为12(我认为11是错误的)。 - Blip

1
我用以下解决方案修复了这个问题: http://qiita.com/mono0926/items/42f7a344b39e946abfe2viewDidLayoutSubviews被调用时,获取tableView.separatorInset.left的值。
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    notificationLabelLeft.constant = tableView.separatorInset.left
}

0

只需将表格的此选项设置为false,它就可以在所有设备上以相同的方式工作,特别是在iPad上。

cellLayoutMarginsFollowReadableWidth = false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接