6

私は、それを含むUITextViewグループの丸みを帯びた角によって自分の角をマスクしようとしUITableViewCellています。現在のセルのスクリーンショットを次に示します。

グループ化された UITableViewCell 内の UITextView

角がセルの境界線と重ならないようにするために使用しているコードの一部を次に示します。両方試してみました

cell.contentView.layer.masksToBounds = YES;
cell.layer.masksToBounds = YES;  //tried this as a test, still doesn't work
detailTextView.clipsToBounds = YES;
[cell.contentView addSubview:detailTextView];

cell.layer.masksToBounds = YES;
cell.contentView.layer.masksToBounds = YES;
detailTextView.clipsToBounds = YES;
[cell addSubview:detailTextView];

これは明らかに機能していません。何が欠けていますか?

4

2 に答える 2

0

この方法でコーナーをマスクすることはできないと確信しています。セルbackgroundViewは集合用の画像なUITableViewのでマスキング感はありません。

この問題の可能な解決策は、自分で角を丸くすることです。上のセルの上隅と下のセルの下隅のみを丸めたいので、これは少し注意が必要です。幸いなことに、@lomanf は任意の角を丸めるための優れたソリューションをここに投稿しました: Round two corners in UIView。彼のMTDContextCreateRoundedMask方法を使えば、目標を達成することができます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Other cell instantiation

    // First cell in section
    if (indexPath.row == 0) {
        [self roundTopOrBottomCornersOfCell:cell top:YES];       
    }
    // Last cell in section
    else if (indexPath.row == tableView.numberOfRowsInSection:indexPath.section-1) {
        [self roundTopOrBottomCornersOfCell:cell top:NO];
    }
}

// Modified from the second part of @lomanf's Solution 1
- (void)roundTopOrBottomCornersOfCell:(UITableViewCell*)cell top:(BOOL)top {
        // Set constant radius
        CGFloat radius = 5.0;

        // Create the mask image you need calling @lomanf's function
        UIImage* mask;
        if (top) {
            mask = MTDContextCreateRoundedMask(self.view.bounds, radius, radius, 0.0, 0.0);
        }
        else {
            mask = MTDContextCreateRoundedMask(self.view.bounds, 0.0, 0.0, radius, radius);
        }

        // Create a new layer that will work as a mask
        CALayer* layerMask = [CALayer layer];            
        layerMask.frame = cell.bounds;

        // Put the mask image as content of the layer
        layerMask.contents = (id)mask.CGImage;

        // Set the mask layer as mask of the view layer
        cell.layer.mask = layerMask;
}        
于 2013-09-06T16:30:01.770 に答える
0

同じ問題が私に発生しました

違いは、プレーン スタイルを使用しており、すべてのセルの角を丸くしようとしていることです。最後に、私はそれを作りました、ここに私の方法があります:

1.このコードをカスタムtableViewCellのawakeFromNibメソッドに入れます

    [cell.layer setMasksToBounds:YES];
    [cell.layer setCornerRadius:5.0];

2. カスタム TableViewCell の contentview の背景色を白色に設定してから、tableView の背景色をクリア カラーに設定します。それで全部です。

于 2015-01-06T11:37:34.060 に答える