在我的应用程序中的UITableViewController的cellForRowAtIndexPath:
方法中,我需要将程序化的UIView固定到每个单元格各自的cell.contentView的底部。这是我的代码:
separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320,15)];
separatorLineView.tag = 17;
separatorLineView.backgroundColor = [UIColor colorWithHexString:@"F0F5F7"];
[cell.contentView addSubview:separatorLineView];
[self.separatorLineView setTranslatesAutoresizingMaskIntoConstraints:NO];
NSDictionary* views = NSDictionaryOfVariableBindings(separatorLineView);
NSString *format = @"V:[separatorLineView]-|";
positionYConstraint = [NSLayoutConstraint constraintsWithVisualFormat:format
options:0
metrics:nil
views:views];
heightConstraint = [NSLayoutConstraint constraintWithItem:postSeparatorLineView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:cell.contentView
attribute:NSLayoutAttributeHeight
multiplier:0.01
constant:15];
[cell.contentView addConstraints:positionYConstraint];
[cell.contentView addConstraint:heightConstraint];
[cell.contentView layoutSubviews];
使用setTranslatesAuto...:NO
行运行时,我看不到separatorLineView,甚至在视图调试器中也看不到。当我对该行进行注释时,separatorLineView被设置为cell.contentView的顶部。
基本上我只需要代码来做,将separatorLineView
固定到每个单元格内容的底部 - 请记住我有动态单元格高度。
答案 0 :(得分:1)
你需要在水平方向上有约束,否则它不会知道它的宽度和x位置。检查一下:
UIView * separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320,15)];
separatorLineView.tag = 17;
separatorLineView.backgroundColor = [UIColor colorWithHexString:@"F0F5F7"]; [cell.contentView addSubview:separatorLineView];
[separatorLineView setTranslatesAutoresizingMaskIntoConstraints:NO];
NSDictionary* views = NSDictionaryOfVariableBindings(separatorLineView);
NSString *formatV = @"V:[separatorLineView(==15)]|"; // changed this line to set 15 as height and to really pin your view (note I remove the "-" because it adds a 8 margin)
NSArray *positionYConstraint = [NSLayoutConstraint constraintsWithVisualFormat:formatV
options:0
metrics:nil
views:views];
NSString *formatH = @"H:|[separatorLineView]|"; //these are the missing constraints
NSArray *positionXConstraint = [NSLayoutConstraint constraintsWithVisualFormat:formatH
options:0
metrics:nil
views:views];
[cell.contentView addConstraints:positionYConstraint];
[cell.contentView addConstraints:positionXConstraint];