UITableviewCell 中的 UICollectionView。添加约束后,UICollectionView 不显示
Posted
技术标签:
【中文标题】UITableviewCell 中的 UICollectionView。添加约束后,UICollectionView 不显示【英文标题】:UICollectionView within UITableviewCell. UICollectionView not showing once constraints are added 【发布时间】:2017-05-09 16:03:24 【问题描述】:所以我遇到了一个奇怪的错误。我在UITableView
中有一个UICollectionView
,只要我不添加约束就会显示。我正在尝试使用简单的约束将 collectionView 限制在单元格的左侧,但是每当我添加约束时,视图就会消失。我没有收到任何自动布局错误/警告,实际上调试器不会抛出任何类型的标志。但我仍然无法让 collectionView 显示何时添加约束。 collectionView 的左侧应该有一个标签。如何让两者都出现在单元格中?
代码如下:
// Init the average usage label
self.labelMonthlyUsage = [[UILabel alloc] init];
// Setup the average usage label
self.labelMonthlyUsage.userInteractionEnabled = NO;
self.labelMonthlyUsage.text = @"Monthly Usage:";
self.labelMonthlyUsage.adjustsFontSizeToFitWidth = YES;
self.labelMonthlyUsage.translatesAutoresizingMaskIntoConstraints = NO;
self.labelMonthlyUsage.hidden = NO;
self.labelMonthlyUsage.numberOfLines = 1;
self.labelMonthlyUsage.textColor = [UIColor blackColor];
self.labelMonthlyUsage.textAlignment = NSTextAlignmentLeft;
// Init the collection view
EPSCVFlowLayout *layout = [[EPSCVFlowLayout alloc] init];
self.cvMonthlyUsage = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 190, 150) collectionViewLayout:layout];
[self.cvMonthlyUsage registerClass:[EPSCollectionViewCell class] forCellWithReuseIdentifier:@"cvCell"];
self.cvMonthlyUsage.delegate = self;
self.cvMonthlyUsage.dataSource = self;
self.cvMonthlyUsage.backgroundColor = [UIColor greenColor];
self.cvMonthlyUsage.translatesAutoresizingMaskIntoConstraints = NO;
self.cvMonthlyUsage.hidden = NO;
self.cvMonthlyUsage.userInteractionEnabled = YES;
self.cvMonthlyUsage.clipsToBounds = YES;
self.cvMonthlyUsage.scrollEnabled = YES;
[self.cvMonthlyUsage setNeedsLayout];
[self.cvMonthlyUsage layoutIfNeeded];
// Add the views to the cell
[self addSubview:self.labelMonthlyUsage];
[self addSubview:self.cvMonthlyUsage];
// Add constraints for the views in the cell
NSLayoutConstraint *labelConstraint = [NSLayoutConstraint constraintWithItem:self.labelMonthlyUsage
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeCenterY
multiplier:1
constant:0];
NSDictionary *views = [NSDictionary dictionaryWithObjects:@[self.labelMonthlyUsage, self.cvMonthlyUsage]
forKeys:@[@"label", @"cv"]];
NSArray *viewConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[label]-(>=8,<=300)-[cv]-10-|"
options:NSLayoutFormatAlignAllCenterY
metrics:nil
views:views];
[self addConstraint:labelConstraint];
[self addConstraint:viewConstraints];
提前感谢您的帮助!
【问题讨论】:
尝试使用 Xcode 的视图调试功能。它将向您显示您的视图在屏幕上的位置以及原因。您还可以告诉它向您显示剪辑的视图,这通常可以解释为什么它们不在屏幕的可见区域中。 照你说的做了,发现尽管设置了约束,但位置、大小和可滚动内容约束都是模棱两可的。现在,一旦我添加了正确的约束,一切都会正确显示。感谢您的建议! 【参考方案1】:感谢 Phillip Mills 帮助我找出问题所在。当我访问视图调试器时,它显示 UICollectionView 对位置和大小有模棱两可的约束。添加一些新约束后,一切正常。感谢您拯救了这一天!
【讨论】:
以上是关于UITableviewCell 中的 UICollectionView。添加约束后,UICollectionView 不显示的主要内容,如果未能解决你的问题,请参考以下文章
collectionView:didSelectItemAtIndexPath:没有被调用
UITableViewCell 中的 UIDatePicker 更新 UITableViewCell 文本标签
更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象
确定 UITableViewCell 中的 UIButton