gpt4 book ai didi

objective-c - UiView 上的 UIBezierPath 在滚动 tableview 之前不会更新

转载 作者:行者123 更新时间:2023-12-05 03:07:21 26 4
gpt4 key购买 nike

我已将 UIView 添加到 Tableview 的单元格中,并通过以下方式将 beizer 路径设置为底部和右侧:

UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(0,
0,
cell.bgView.frame.size.width -2+ shadowSize,
cell.bgView.frame.size.height+1 + shadowSize)];
cell.bgView.layer.masksToBounds = NO;
cell.bgView.layer.shadowColor = [[UIColor colorWithRed:186.0/255.0 green:0.0/255.0 blue:231.0/255.0 alpha:1.0f]CGColor];
cell.bgView.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
cell.bgView.layer.shadowOpacity = 0.7f;
cell.bgView.layer.shadowPath = shadowPath.CGPath;

第一次,当 tableview 重新加载时,bezier 路径没有正确加载

See Picture 1

但是当我向上/向下滚动时它看起来很完美

See Picture 2 .

我已经尝试了所有可能的解决方案,即

dispatch_async(dispatch_get_main_queue(), ^{
[self.topRatedTable reloadData];
});

 [cell layoutIfNeeded];
[cell updateConstraintsIfNeeded];

但没有任何作用。

最佳答案

在布局运行之前,您的单元格及其 subview (例如,我假设 bgView)没有它们的最终帧。如果您的路径创建代码在您的 tableView:cellForRowAtIndexPath: 方法中,那么您将在布局运行之前访问 cell.bgView.frame

在您的自定义 UITableViewCell 子类中,覆盖 layoutSubviews 并在调用 super 后设置 shadowPath:

// In your custom `UITableViewCell` subclass:
- (void)layoutSubviews {
[super layoutSubviews];
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(0,
0,
cell.bgView.frame.size.width -2+ shadowSize,
cell.bgView.frame.size.height+1 + shadowSize)];
self.bgView.layer.shadowPath = shadowPath.CGPath;
}

关于objective-c - UiView 上的 UIBezierPath 在滚动 tableview 之前不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47702626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com