UITableViewCell 子类布局在禁用自动布局的故事板中搞砸了

Posted

技术标签:

【中文标题】UITableViewCell 子类布局在禁用自动布局的故事板中搞砸了【英文标题】:UITableViewCell subclass layout messed up in autoLayout-disabled Storyboard 【发布时间】:2014-02-18 02:03:37 【问题描述】:

我在 Storyboard 中创建了一个表格视图,其中的原型单元格在 Xcode 5 中未选中“使用自动布局”。

单元格是UITableViewCell的子类,主要是添加IBOutlets,里面没有代码。结果是混乱的布局。我尝试更改 Autoresizing 蒙版,但没有成功。也试过this。

如果我实现一个空的layoutSubviews,它会显示正常。知道发生了什么吗? 是auto layout still enabled 尽管取消选中它?

编辑:

更多细节...

@interface SettingDefaultTableViewCell : UITableViewCell

@property (nonatomic, weak) IBOutlet UILabel *label;
@property (nonatomic, weak) IBOutlet UIImageView *imageView;
@property (nonatomic, weak) IBOutlet UIView *backgroundView;

@end

@implementation SettingDefaultTableViewCell

- (void)layoutSubviews

    // Emtpy implementation to fix weird layout bug


@end

禁用自动布局的故事板:

不使用上述layoutSubviews 修复时的结果:

编辑 2:

单元格设置为不自动调整子视图大小。 虽然以上内容足以防止子视图自动调整,但所有自动调整大小的蒙版都设置为仅灵活的右边距和下边距。 只有 > 标记设置为灵活左边距。没有灵活的宽度或高度。

【问题讨论】:

这个问题有点无意义。我从来没有遇到过 UITableViewCell 子类和布局的任何问题,所以我无法猜测你的问题是什么。你对你所做的事情的细节很少,所以我不可能重现这个问题。 没有太多细节,因为正如我所说的子类代码是空的,所以没有必要发布。如果您阅读链接中的问题,您会发现 UITableView 单元格在不同的 ios 版本中有许多怪癖。在我的情况下,即使在 IB 中未选中 autoLayout,它似乎也处于活动状态。 如果您认为问题与 iOS 版本有关,为什么不提一下呢?您并没有真正解释视图是如何混乱的。您没有提供单元格在故事板中的外观与运行时的外观的图片。我的意思是,这里什么都没有。没有什么可以重现问题。 添加了图片,但基本上都已经描述过了。 我能看到的唯一问题是 > 在左边而不是右边。对吗? 【参考方案1】:

单元格正在被未记录的 UITableViewCell 的 layoutSubviews 修改:

尽管没有设置自动调整子视图大小,但默认实现会更改 backgroundView 框架。 尽管被配置为自定义样式单元格,它也会将imageView(“>”)向左移动。

因此避免执行 super 的 layoutSubviews 修复它。

【讨论】:

以上是关于UITableViewCell 子类布局在禁用自动布局的故事板中搞砸了的主要内容,如果未能解决你的问题,请参考以下文章

出队的 UITableViewCell 在滚动之前布局不正确(使用自动布局)

滚动时 UITableViewCell 自动布局抖动的动态单元格高度问题

如何在自动布局中使用 UITableViewCell 的动态高度并在底部视图隐藏时将其他视图向上移动?

使用自动布局子类化 MKAnnotationView

如何更新 UITableViewCell 约束常量并更新单元格高度

自动调整子类 UITableViewCell 子视图的大小