2012-01-25 22 views
16

Mam zwykły UITableView (nie zgrupowane), które chcę dodać cień w lewo i prawo.Dodawanie cienia do UITableView

enter image description here

W jaki sposób można to osiągnąć? Próbowałem:

[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]; 

ale to nie działa.

+4

Czy upewniłeś się, że "clipToBounds" i "maskToBounds" są ustawione na "NO" (odpowiednio dla widoku i warstwy)? – mattjgalloway

+0

Dzięki, koleś, masz rację! Jeśli dodasz odpowiedź, zaznaczę ją jako poprawną odpowiedź. –

+0

Udzielono odpowiedzi. Cieszę się, że to rozwiązało! – mattjgalloway

Odpowiedz

43

Musisz upewnić się, że clipsToBounds i masksToBounds są ustawione na NO odpowiednio w widoku i warstwie.

self.tableView.clipsToBounds = NO; 
self.tableView.layer.masksToBounds = NO; 
+4

Dzięki za informacje. Ale jeśli ustawię tableView.layer.masksToBounds = NO; & tableView.clipsToBounds = NO; , mój tableviewcell przesuwa się ponad granice widoków stołów. Mam tableview, widok obrazu w moim viewController. Część jest więc używana w widoku tabeli, a część jest używana przez iamgeview. Czy możesz mi w tym pomóc? – iOSAppDev

+0

@iOSAppDev Proszę spojrzeć na moją odpowiedź. Zapobiegnie to problemowi, na który napotykasz. –

+2

Lepiej umieść UIView za UITableView i dodaj cień do UIView. – filou

0

Czy to nie biała poświata widzę cień? Nie masz ustawionego przesunięcia, więc robi dokładnie to, co chcesz. Dla cienia ustaw kolor na czarny i nadaj mu przesunięcie o wartości 3,5 lub coś podobnego.

+0

Nie, ten obraz jest to, co próbowałem osiągnąć. Teraz naprawiłem komentarz za pomocą mattjgalloway. Dzięki i tak. –

4

chciałbym podzielić się moją rozwiązanie: Wymaga to podklasy UITableView i dodać obiekt, przez wzgląd na demonstracji nazwijmy to showShadow. Dodaj do tego pliku .h tabeli widoku danych:

@property (nonatomic,assign) BOOL showShadow;

oraz jej odpowiedni @synthesize w pliku .m stworzyć metody getter i setter:

@synthesize showShadow;

Następnie dodać Ivar UIView *shadowView; do pliku .h widoku tabeli. Teraz w sposobie - (id)initWithFrame:(CGRect)frame swoje podklasy UITableView dodać następujący fragment kodu założyć, że będzie w końcu rzucić cień:

- (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; 
} 

I wreszcie pisać setter, aby pokazać/ukryć cień:

-(void)setShowShadow:(BOOL)s{ 

    showShadow = s; 

    if(s){ 
     [self.superview insertSubview:shadowView belowSubview:self]; 
    }else{ 
     [shadowView removeFromSuperview]; 
    } 
} 

Dodatkowo, jeśli chcesz, aby przesunąć stolik (z jakiegokolwiek powodu), należy zastąpić metodę -setFrame: również przesunąć shadowView wraz z nim (ponieważ nie jest w widoku tabeli widoku hierarchii):

-(void)setFrame:(CGRect)frame{ 

    [super setFrame:frame]; 
    shadowView.frame = frame; 

} 

Pomyślnie włączyłeś cienie! Używaj go tak:

MySubclassedTableView *table = [[MySubclassedTableView alloc]initWithFrame:CGRectMake(20, 200, 280, 200)]; 
     [self.view addSubview:table]; 
     table.showShadow = YES; 

UWAGA:

Musisz ustawić właściwość showShadow PO dodać swój widok tabeli, ponieważ linia table.showShadow wezwie linię [self .superview insertSubview: shadowView belowSubview: self]; co wymaga istnienia widoku tabeli.

Powiązane problemy