【问题标题】:iOS 8.3 - UITableView cell not aligned, indentation to the leftiOS 8.3 - UITableView 单元格未对齐,向左缩进
【发布时间】:2015-06-16 19:10:27
【问题描述】:

我偶然发现了一种奇怪的行为,添加到UITableView 的单元格有时会向左缩进。这只发生在 iOS 8.3 上,我找不到关于何时发生这种情况的明确模式。

有人遇到同样的事情吗?

【问题讨论】:

标签: ios uitableview uiview ios8.3


【解决方案1】:

嗯 - 这很奇怪......

似乎有时UITableViewCellContentViewcontentViewUITableViewCellContentView 本身不一致。当UITableView 本身是比屏幕宽的布局的一部分时(如水平寻呼机),就会发生这种情况。

幸运的是,解决方案很简单:添加一个约束以将contentView 与其父对象对齐。这只能以编程方式完成,因为您无法在布局编辑器中编辑 contentView 的约束。

- (void)awakeFromNib {
    // Initialization code

    // iOS 8.3 bug, where contentView's x position isnt aligned with self's x position...
    // So we add a constraint to do the obvious...
    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]];
}

这仅在 iOS 8.3 上开始发生,但该修复似乎是安全的并且向后兼容早期版本。

一如既往 - 请用您自己的经验发表评论。

【讨论】:

  • 不确定您是如何发现这一点的,但我非常感谢。我的许多表格单元格看起来很奇怪,我不知道为什么。这解决了所有问题。谢谢!
  • 很高兴我能提供一些帮助。
  • 所以我注意到,虽然当我使用 8.3 SDK 构建并在 8.2 上运行时,这似乎已经解决了这个问题,但当我实际将 iPad 升级到 8.3 时,它仍然存在。还有其他想法吗?
  • 此解决方案依赖于添加约束来修复故障。如果它仍然存在于您的设备上,那么如果删除或影响所述约束,则会出现其他情况。
  • @Vaiden 感谢您的回答。我应该把那个代码放在哪里?在包含 UITableView 或其他地方的视图控制器中?
【解决方案2】:

看起来是因为 layoutMargins 属性。我已经取消选中我的约束第二项“相对于边距”,一切都很好。这是article

【讨论】:

  • 感谢您的意见。但是我没有保证金限制,问题从 iOS 8.3 开始。
【解决方案3】:

我在正在开发的应用程序中看到了这个问题的变体。我们看到一些表格视图单元格的前导/尾随对齐不正确。

它没有连接到 iOS 8.3,它只在使用 Xcode 6.3 构建时发生。我可以采用相同的项目并在 Xcode 6.2 上构建它,但它不会发生。

经过一番调查,事实证明这只发生在xibs中的表格视图单元格上。

解决方法是移除对边距的前导/尾随约束,并将它们直接设置为超级视图(即单元格内容视图)。

【讨论】:

  • 那么这一定是一个不同的问题。我(OP)报告的问题是使用我们从 XCode 6.2 编译和提交的应用程序版本从 iOS 8.2 升级到 8.3 的用户遇到的。
【解决方案4】:

在 iOS 8.3 上运行时,我的 tableViewCells 的左右边距有所增加,这是我在以前的版本中没有看到的。

设置:

    self.contentView.preservesSuperviewLayoutMargins = NO;

解决了我的问题并在所有版本上保持了一致的边距,但请注意,这仅适用于 iOS 8+。

因此,例如,您可以在此处执行此操作:

- (void)awakeFromNib {
    if ([self.contentView respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
        self.contentView.preservesSuperviewLayoutMargins = NO;
    }
}

【讨论】:

  • 这对我来说非常有效。只需将它包裹在 if(respondsToSelector) 签入 awakeFromNib 中,它就停止了额外的缩进。
  • 我正在经历同样的事情!如果我不使用情节提要,你能告诉我如何解决吗? self.tableView = UITableView(frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height), style: UITableViewStyle.Plain) self.tableView!.delegate = self self .tableView!.dataSource = self self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 谢谢
  • 这有助于解决我在 iOS 11 中测试 tableView UI 故障时遇到的问题,该故障在 iOS 10 中也不存在。谢谢!
【解决方案5】:

这对我来说是固定的。我刚刚停止使用UITableViewCellimageViewtextLabel 属性重新连接到我的插座。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多