2017-05-30 7 views
4

私はセルに2つのサブビューを持っています。私はthis linkから見つけた良いアプローチと聞こえるので、シャドウビュー用とコーナー半径用の2つです。だから私はIBDessignablesでObjective-Cでそれを作ろうとしました。セルのサイズが同じでも動的なサイズのシャドーが別のセルに表示されていても、cornerviewは正常であればすべてうまく動作します。IBDesignablesを持つセルのコーナー半径を持つシャドウ

- セルのビュー階層 - ここ

-- UITableViewCell 
    -- contentView 
    -- shadowView 
     -- CornerView 

シャドウビューの私のコードです

ShadowView.h

IB_DESIGNABLE 
@interface ShadowView : UIView 
@property (nonatomic) IBInspectable CGFloat cornerRadius; 
@property (nonatomic) IBInspectable CGFloat shadowRadius; 
@property (nonatomic) IBInspectable CGSize shadowOffset; 
@end 

ShadowView.m

@implementation ShadowView 

-(void)setup{ 
    self.cornerRadius = 5.0f; 
    self.shadowRadius = 2.0f; 
    self.shadowOffset = CGSizeMake(0, 0); 
    self.backgroundColor = [UIColor clearColor]; 
} 

- (instancetype)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self setup]; 
    } 
    return self; 
} 


- (id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self setup]; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect { 
    [self updateLayerProperties]; 
} 

- (void)updateLayerProperties { 
    self.layer.shadowOffset = self.shadowOffset; 
    self.layer.shadowRadius = self.shadowRadius; 
    self.layer.shadowOpacity = 0.3; 
    self.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:self.cornerRadius].CGPath; 
    self.layer.masksToBounds = NO; 
    self.layer.shouldRasterize = YES; 
    self.layer.rasterizationScale = [UIScreen mainScreen].scale; 
} 

@end 

誰でも正確な問題が分かっていますか?コーナービューの境界は完全には動作しますが、シャドウビューでは機能しません。誰もがそれをテストしたい場合

デモファイル

そしてここでは、デモファイル..ですhttps://www.dropbox.com/s/myxjyj5pu3ey3aw/demoDesignables.zip?dl=0

+0

つまり、影が下のセルをカバーしているということですか? – Suragch

+0

はい.. cornerviewはシャドービューのサブビューと同じサイズですが、その細かい影は動的なセルの高さのために別のセルをカバーしています –

+0

私はそれが何をしようとしているのか本当に分かりません。細胞間の間隔がそれより大きければそれを修正するだろうか?あなたが望むものを示すイメージが役立ちます。 – Suragch

答えて

1

ビューは、コンテンツを描画するマルチタッチイベントを処理し、サブビューのレイアウトを管理する責任があります。 ShadowViewlayoutSubviews機能を無効にする必要があります。

-(void)layoutSubviews { 
    [super layoutSubviews]; 
    [self updateLayerProperties]; 
} 
関連する問題