2013-03-02 2 views
0

Я использую следующий код в моем подклассе UITableViewCell установить тень для невыбранных клеток в моем UITableViewПочему моя детальTextLabel перемещается?

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated 
{ 
    [super setHighlighted:highlighted animated:animated]; 
    [self applyLabelDropShadow:!highlighted]; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 
    [self applyLabelDropShadow:!selected]; 
} 

- (void)applyLabelDropShadow:(BOOL)applyDropShadow 
{ 
    self.textLabel.shadowColor = applyDropShadow ? [UIColor whiteColor] : nil; 
    self.textLabel.shadowOffset = CGSizeMake(0, 1); 
    self.detailTextLabel.shadowColor = applyDropShadow ? [UIColor whiteColor] : nil; 
    self.detailTextLabel.shadowOffset = CGSizeMake(0, 1); 
} 

Этого коде из другого StackOverflow question по Mike Stead и она отлично работает.

Когда строка перемещается от выбранного до снятого выделения, вы можете увидеть сдвиг вниз очень немного, что я не хочу. Это не происходит с textLabel для ячейки.

Любые идеи, почему?

ответ

2

Попробуйте использовать [UIColor clearColor] для не-тени вместо nil:

- (void)applyLabelDropShadow:(BOOL)applyDropShadow 
{ 
    self.textLabel.shadowColor = applyDropShadow ? [UIColor whiteColor] : [UIColor clearColor]; 
    self.textLabel.shadowOffset = CGSizeMake(0, 1); 
    self.detailTextLabel.shadowColor = applyDropShadow ? [UIColor whiteColor] : [UIColor clearColor]; 
    self.detailTextLabel.shadowOffset = CGSizeMake(0,1); 
} 
+0

Это фиксируется, но почему это не случилось с 'textLabel' с тем же кодом? – conorgriffin

+0

Это может быть проблема с пиксельной границей, где размер textLabel отличается от размера detailTextLabel. Смещение одного пикселя влияет на одно видимое, а не другое. –

+0

Имеет смысл, принял ваш ответ. Пришлось ждать обязательного периода охлаждения. – conorgriffin