从 xib 添加自定义视图作为子视图时,UITableViewCell 的高度错误
Posted
技术标签:
【中文标题】从 xib 添加自定义视图作为子视图时,UITableViewCell 的高度错误【英文标题】:UITableViewCell has wrong height when adding custom view from xib as a subview 【发布时间】:2016-12-09 09:04:35 【问题描述】:我有带有单元格的 UITableView,并且在每个单元格中我想添加自定义视图。我创建了 xib 文件 MyView.xib 并创建了作为 UIView 类扩展的类,其名称为 MyView。在 xib 文件中,我将 File's Owner 类添加为 MyView。
在 UITableViewCell 中添加此自定义视图时,我希望该自定义视图具有动态高度。这就是我在 init 方法中添加这段代码的原因。
- (id)initWithCoder:(NSCoder *)aDecoder
self = [super initWithCoder:aDecoder];
if (self)
// 1. load the interface
[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];
// 2. add as subview
[self addSubview:self.view];
// 3. allow for autolayout
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
// 4. add constraints to span entire view
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:@@"view":self.view]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@@"view":self.view]];
[self setStyle];
return self;
重要的是我正在使用故事板来创建 tableView。所以我有一个带有一个原型单元的表格视图,我在这里添加了我的自定义视图和其他内容。我正在使用自动布局。
现在的问题是当我运行应用程序时,前几个可见单元格的高度错误(自定义视图不完全可见)。当我向下滚动时,下一个单元格具有良好的高度(自定义视图可见),当我向后滚动时,列表顶部的几个单元格的高度是正确的。
有人能告诉我第一次加载列表时如何解决单元格高度的问题吗?
【问题讨论】:
改为将其移至awakeFromNib
func
@CZ54 没有任何区别。 ://
可能是你的细胞被重复使用了。
在cellForRow
返回单元格之前尝试调用cell.contentView.layoutIfNeeded()
@Tj3n 已经尝试过了,但没有帮助。
【参考方案1】:
试试
- (void)awakeFromNib
[super awakeFromNib];
// 1. load the interface
[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];
// 2. add as subview
[self addSubview:self.view];
// 3. allow for autolayout
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
// 4. add constraints to span entire view
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:@@"view":self.view]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@@"view":self.view]];
[self setStyle];
【讨论】:
以上是关于从 xib 添加自定义视图作为子视图时,UITableViewCell 的高度错误的主要内容,如果未能解决你的问题,请参考以下文章