我正在使用 CALayer 将阴影应用到 UITableViewCell。
这是我的代码:
- (void)addShadowToView:(UIView *)view
{
// shadow
view.layer.shadowColor = [[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor];
view.layer.shadowOpacity = 1.0f;
view.layer.shadowOffset = CGSizeMake(0.0f, 3.0f);
view.layer.shadowRadius = 6.0f;
CGRect shadowFrame = view.layer.bounds;
CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
view.layer.shadowPath = shadowPath;
}
问题是对于某些 tableviewcells,阴影不会跨越单元格的整个宽度。对于一些细胞来说它是正确的,对于其他细胞来说它是错误的。我确实注意到设备的旋转也会影响它,重新加载 tableview 数据有时会解决它。
缓解此问题的最佳方法是什么(我并不是说每次旋转时都重新加载整个 TableView 等)?
向下滚动后同一表格 View 中单元格的底部(阴影仅应用于宽度的前 75%):
编辑:我注意到问题是由这些代码行引起的:
CGRect shadowFrame = view.layer.bounds;
CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
view.layer.shadowPath = shadowPath;
如果我将它们排除在外,一切都很好。但有人告诉我,使用它有一定的性能优势。不知何故,旋转后阴影未正确应用于新尺寸..
最佳答案
您可以覆盖单元格框架的 setter 并调用 addShadowToView:
。您可以通过存储单元格的大小并仅在大小更改时更新阴影路径来进一步优化这一点,例如:
@property (nonatomic, assign) CGSize size;
和
- (void) setFrame:(CGRect)frame
{
[super setFrame:frame];
// Need to check make sure this subview has been initialized
if(self.subviewThatNeedsShadow != nil && !CGSizeEqualToSize(self.size,_frame.size)
{
[self addShadowToView: self.subviewThatNeedsShadow];
}
}
关于ios - UITableViewCell 中的 CALayer 阴影绘制不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623815/