左と右にドロップシャドウを追加したいプレーンなUITableView(グループ化されていない)があります。
どうすればこれを達成できますか?私はもう試した:
[self.tableView.layer setShadowColor:[[UIColor whiteColor] CGColor]];
[self.tableView.layer setShadowOffset:CGSizeMake(0, 0)];
[self.tableView.layer setShadowRadius:5.0];
[self.tableView.layer setShadowOpacity:1];
しかし、それは機能しません。
ビューとレイヤーでclipsToBounds
とmasksToBounds
がそれぞれNO
に設定されていることを確認する必要があります。
self.tableView.clipsToBounds = NO;
self.tableView.layer.masksToBounds = NO;
私のソリューションを共有したいと思います。これには、UITableViewをサブクラス化し、プロパティを追加する必要があります。デモンストレーションのために、showShadowと呼びましょう。これをテーブルビューの.hファイルに追加します。
@property (nonatomic,assign) BOOL showShadow;
.mファイル内の対応する@synthesizeは、getterメソッドとsetterメソッドを作成します。
_@synthesize showShadow;
_
次に、iVar _UIView *shadowView;
_をテーブルビューの.hファイルに追加します。次に、サブクラス化されたUITableViewの- (id)initWithFrame:(CGRect)frame
メソッドに次のコードを追加して、最終的に影を落とすビューを設定します。
_- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
shadowView = [[UIView alloc]initWithFrame:self.frame];
shadowView.backgroundColor = [UIColor whiteColor];
shadowView.layer.shadowOpacity = 0.1;
shadowView.layer.shadowOffset = CGSizeMake(3, 3);
shadowView.layer.shadowRadius = 1;
}
return self;
}
_
そして最後に、影を表示/非表示にするsetterメソッドを記述します。
_-(void)setShowShadow:(BOOL)s{
showShadow = s;
if(s){
[self.superview insertSubview:shadowView belowSubview:self];
}else{
[shadowView removeFromSuperview];
}
}
_
さらに、(何らかの理由で)テーブルを移動する場合は、_-setFrame:
_メソッドをオーバーライドして、shadowViewも一緒に移動する必要があります(テーブルビューのビュー階層にはないため)。
_-(void)setFrame:(CGRect)frame{
[super setFrame:frame];
shadowView.frame = frame;
}
_
シャドウが正常に有効になりました。このように使用してください:
_MySubclassedTableView *table = [[MySubclassedTableView alloc]initWithFrame:CGRectMake(20, 200, 280, 200)];
[self.view addSubview:table];
table.showShadow = YES;
_
警告:
ShowShadowプロパティを設定する必要があります[〜#〜] after [〜#〜]行table.showShadowが行[self.superview insertSubview:shadowView belowSubview:を呼び出すため、テーブルビューを追加します。自己];これには、テーブルビューが存在する必要があります。
影が見える白い輝きではないですか?オフセットが設定されていないため、目的どおりに実行されます。シャドウの場合は、色を黒に設定し、オフセットを3,5程度にします。