2

shadowsの個々のセルに追加していUITableViewます。影には一貫性がありません。次のシナリオを検討してください。

表示する行は 20 行あり、最初のビューでは 10 行しか表示されません。ここでは、期待どおりに影が適切に表示されます。しかし、上下にスクロールするとすぐに、現在表示されている新しいセルの一部に期待どおりの影が表示されていますが、他のセルには表示されていません。問題は の にあるようzPositionです。一部のセルでは影が後ろにあり、他のセルではその下にあるセルと比較して前にあるため、ユーザーに表示/非表示になります。UITableViewCelllayer

私が遭遇した投稿のほとんど(たとえば、目的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;
    }
4

1 に答える 1

0

これがうまくいくかもしれないように試してみてください、

    -(UITableViewCell*)tableView:(UITableView*) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"Cell";
   navigatorCell* cell = (navigatorCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

             if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

            // 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;
            }
于 2013-03-18T12:37:40.530 に答える