shadows
の個々のセルに追加していUITableView
ます。影には一貫性がありません。次のシナリオを検討してください。
表示する行は 20 行あり、最初のビューでは 10 行しか表示されません。ここでは、期待どおりに影が適切に表示されます。しかし、上下にスクロールするとすぐに、現在表示されている新しいセルの一部に期待どおりの影が表示されていますが、他のセルには表示されていません。問題は の にあるようzPosition
です。一部のセルでは影が後ろにあり、他のセルではその下にあるセルと比較して前にあるため、ユーザーに表示/非表示になります。UITableViewCell
layer
私が遭遇した投稿のほとんど(たとえば、目的C:ナビゲーションバーとテーブルセルにシャドウ効果を追加する方法)は、レイヤーのzPositionを明示的に設定していないUITableViewCell
ため、それが必要かどうか、または何かがあるかどうかを知りたかったここに欠けています。
編集:ここでコードスニペットを見つけてください
-(UITableViewCell*)tableView:(UITableView*) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
navigatorCell* cell = (navigatorCell *)[tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"] forIndexPath:indexPath];
// cell configuration code goes here
//now add shadow
[cell.layer setMasksToBounds:NO];
cell.layer.shadowColor = [[UIColor blackColor] CGColor];
cell.layer.shadowOffset = CGSizeMake(0.0f, 5.0f);
cell.layer.shadowRadius = 3.0f;
cell.layer.shadowOpacity = 0.750f;
cell.clipsToBounds = NO;
//if I uncomment this, then it works properly, but problem arises again if I insert/remove cells
// cell.layer.zPosition = -indexpath.row;
CGRect shadowFrame = cell.layer.bounds;
CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGpath;
cell.layer.shadowPath = shadowPath;
return cell;
}