calayer 没有根据表视图单元格中的 UIView 大小而变化


自定义

UITableViewCell中有一个view1(UIView(,在AutoLayout之后绘制边框,我希望视图1(UIView(的新大小

UITableViewCell内容是动态的,因此我使用UITableViewAutomaticDimension进行自我调整大小

我也使用以下方法,但我得到原始大小。展开后我无法获得新的视图1(UIView(大小

[self.tblView1 setNeedsLayout];
[self.tblView1 layoutIfNeeded]; 
[cell.view1 setNeedsLayout];
[cell.view1 layoutIfNeeded];
CALayer *rightBorder = [CALayer layer];
            rightBorder.backgroundColor = [[UIColor redColor] CGColor];
            rightBorder.frame = CGRectMake(cell.view1.frame.size.width-1, 0, 1, cell.view1.frame.size.height);
            [cell.view1.layer addSublayer:rightBorder];

右边框是绘制的,但根据视图 1 (UIView( 的原始大小,即宽度 = 394 高度 = 322 不是根据视图 1 (UIView( 布局大小后的新大小,宽度 = 394 高度 = 422

试试这个。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(tableView.tag == self.tblEditorialCalendar.tag)
{
UIView *leftBorder = [UIView new];
leftBorder.backgroundColor = [UIColor redColor];
leftBorder.translatesAutoresizingMaskIntoConstraints = NO;
UIView *topBorder = [UIView new];
topBorder.backgroundColor = [UIColor greenColor];
topBorder.translatesAutoresizingMaskIntoConstraints = NO;
UIView *rightBorder = [UIView new];
rightBorder.backgroundColor = [UIColor blueColor];
rightBorder.translatesAutoresizingMaskIntoConstraints = NO;
UIView *bottomBorder = [UIView new];
bottomBorder.backgroundColor = [UIColor yellowColor];
bottomBorder.translatesAutoresizingMaskIntoConstraints = NO;
[cell addSubview:leftBorder];
[cell addSubview:topBorder];
[cell addSubview:rightBorder];
[cell addSubview:bottomBorder];
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[leftBorder(3)]"
                                                             options:0
                                                             metrics:nil
                                                               views:NSDictionaryOfVariableBindings(leftBorder)]];
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[leftBorder]|"
                                                             options:0
                                                             metrics:nil
                                                               views:NSDictionaryOfVariableBindings(leftBorder)]];
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-3-[topBorder]|"
                                                             options:0
                                                             metrics:nil
                                                               views:NSDictionaryOfVariableBindings(topBorder)]];
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[topBorder(1)]"
                                                             options:0
                                                             metrics:nil
                                                               views:NSDictionaryOfVariableBindings(topBorder)]];
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[rightBorder(1)]|"
                                                             options:0
                                                             metrics:nil
                                                               views:NSDictionaryOfVariableBindings(rightBorder)]];
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[rightBorder]|"
                                                             options:0
                                                             metrics:nil
                                                               views:NSDictionaryOfVariableBindings(rightBorder)]];
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-3-[bottomBorder]|"
                                                             options:0
                                                             metrics:nil
                                                               views:NSDictionaryOfVariableBindings(bottomBorder)]];
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[bottomBorder(1)]|"
                                                             options:0
                                                             metrics:nil
                                                               views:NSDictionaryOfVariableBindings(bottomBorder)]];

cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
}

另一种方法是使用布局锚点(从iOS 9及更高版本支持(而不是VFL

[leftBorder.widthAnchor constraintEqualToConstant:3].active = YES;
[cell.leadingAnchor constraintEqualToAnchor:leftBorder.leadingAnchor constant:0].active = YES;
[cell.topAnchor constraintEqualToAnchor:leftBorder.topAnchor constant:0].active = YES;
[cell.bottomAnchor constraintEqualToAnchor:leftBorder.bottomAnchor constant:0].active = YES;
[topBorder.heightAnchor constraintEqualToConstant:1].active = YES;
[cell.leadingAnchor constraintEqualToAnchor:topBorder.leadingAnchor constant:3].active = YES;
[cell.topAnchor constraintEqualToAnchor:topBorder.topAnchor constant:0].active = YES;
[cell.trailingAnchor constraintEqualToAnchor:topBorder.trailingAnchor constant:0].active = YES;
[rightBorder.widthAnchor constraintEqualToConstant:1].active = YES;
[cell.trailingAnchor constraintEqualToAnchor:rightBorder.trailingAnchor constant:0].active = YES;
[cell.topAnchor constraintEqualToAnchor:rightBorder.topAnchor constant:0].active = YES;
[cell.bottomAnchor constraintEqualToAnchor:rightBorder.bottomAnchor constant:0].active = YES;
[bottomBorder.heightAnchor constraintEqualToConstant:1].active = YES;
[cell.leadingAnchor constraintEqualToAnchor:bottomBorder.leadingAnchor constant:3].active = YES;
[cell.trailingAnchor constraintEqualToAnchor:bottomBorder.trailingAnchor constant:0].active = YES;
[cell.bottomAnchor constraintEqualToAnchor:bottomBorder.bottomAnchor constant:0].active = YES;

或者,您可以在笔尖文件中获取四个视图(作为四个边框(,并在适当的约束下放置它们。

最新更新