无法约束将UIView固定到单元格contentView的底部

时间:2016-10-27 01:12:24

标签: ios objective-c nslayoutconstraint

在我的应用程序中的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固定到每个单元格内容的底部 - 请记住我有动态单元格高度。

1 个答案:

答案 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];