2016-08-25 8 views
1

UIViewとしていくつかのラウンドサブビューを持つテーブルビューを作成したいと思います。 UIViewのlayer.cornerRadiusとclipsToBoundsを設定します。しかし、いくつかのビューはラウンドではありません。誰が私にこの問題の解決や助言を与えるのを助けることができますか?UITableViewCellのサブビューはラウンドできません

マイコード:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString * settCellID = @"settingCellID"; 
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:settCellID]; 
    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:settCellID]; 

     UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 10, 20, 20)]; 
     view.layer.cornerRadius = 10; 
     view.clipsToBounds = 1; 
     view.layer.rasterizationScale = [UIScreen mainScreen].scale; 
     view.layer.shouldRasterize = 1; 
     view.backgroundColor = [UIColor blueColor]; 
     [cell.contentView addSubview:view]; 
    } 
    return cell; 
} 

結果:このclipsToBoundインサイド

enter image description here

+0

これはデバイス上またはシミュレータ上で発生していますか? – beyowulf

+0

行の高さとして返す値は何ですか?この丸いビューの高さよりも大きいです。 –

+0

これはシミュレータで発生していますか?シミュレータの不具合が発生する可能性があります。シミュレータのスケールを100%に設定してください(メニュー:ウィンドウ - >スケール - > 100%)。 – Jeyamahesan

答えて

1

試してみるカスタムセルクラスを作成し、プログラムで作成したストーリーボードを使用せずにビューを作成します。カスタムセルクラスのビューのプロパティを設定します。上記のコードを実装しますが、ここでは少し変更しています。

static NSString * settCellID = @"settingCellID"; 
'CustomClassName' * cell = (CustomClassName*)[tableView dequeueReusableCellWithIdentifier:settCellID]; 
cell.viewPropertyName.layer.cornerRadius = 10; 
cell.viewPropertyName.clipsToBounds = YES; 
cell.viewPropertyName.maskToBounds =YES; 
cell.viewPropertyName.backgroundColor = [UIColor blueColor]; 
+0

あなたの助けていただきありがとうございます、私はあなたの提案に使用された問題を解決します。ラウンドビューを作成する私たちの方法の違いがわかりません。あなたの道を利用した丸い眺めは、はしごのように似ていました。あなたがそれを知っていれば教えてください。 –

0

がブール値であるあなたはYESまたはNOを与え、必要であれば角の半径のためmaskToBound = YESを使用しようとする必要がありますので、それに応じてclipsToBoundを使用するよりも、下のビューをマージすると、私はrasterizationScaleとshouldRasterizeがここで便利だとは思わない。これがあなたを助けることを願っています。あなたはUITableViewCellのにしたい場合

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString * settCellID = @"settingCellID"; 
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:settCellID]; 
if (!cell) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:settCellID]; 

    UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 10, 20, 20)]; 
    view.layer.cornerRadius = 10; 
    view.clipsToBounds = YES; 
    view.maskToBounds =YES; 
    view.layer.rasterizationScale = [UIScreen mainScreen].scale; 
    view.layer.shouldRasterize = 1; 
    view.backgroundColor = [UIColor blueColor]; 
    [cell.contentView addSubview:view]; 
} 
return cell; 
} 

はまたrasterizationScaleとshouldRasterizeは「オフスクリーンレンダリング」のためである。このLink Click here

+0

rasterizationScaleとshouldRasterizeは「オフスクリーンレンダリング」用ですが、ラウンドビューには影響しません。 "view.clipsToBounds = YES"は "view.layer.masksToBounds = 1"と同じです。私はすでにCGContextRefとUIBezierPathを使ってUITableViewCellでラウンドビューを作成しましたが、実際のラウンドビューは作成できません。 –

+0

次にStoryboardでカスタムセルを作成し、ユーザー定義ランタイム属性を設定します。これはユーザー定義ランタイム属性を使用するのに役立つでしょう。このリンクを好むhttp://stackoverflow.com/questions/12301256/is-it-possible-to -set-uiview-border-properties-from-interface-builder –

+0

ご協力ありがとうございます。私はすでにロックの方法でこの問題を解決しています。カスタムラウンドビューのみがこの問題を解決できる可能性があります。しかし、私はそれらについての違いが分かりません。@ Kartik Singh Bhadoriya –

0

に従うよりも、コーナーとクリップサブビューを丸め、それはラウンドビューには影響を与えません。 "view.clipsToBounds = YES"は "view.layer.masksToBounds = 1"と同じです。私はすでにCGContextRefとUIBezierPathを使ってUITableViewCellでラウンドビューを作成しましたが、実際のラウンドビューは作成できません。

関連する問題