2011-02-07 5 views
0

Я пытаюсь добавить круглый угол в UISearchBar в верхнем левом и верхнем правом углах.Почему маска не работает на UISearchBar

Однако, я обнаружил, что слой маски не работает на UISearchBar, независимо от того, как я его установил.

Вот мой код

// UIView* bar = [searchBar_.subviews objectAtIndex:0]; // try to add mask to background view but also failed 

    UIView* bar = searchBar_; 
    CGRect toolbarBounds = bar.bounds; 
    CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect: toolbarBounds 
               byRoundingCorners:UIRectCornerTopLeft 
                cornerRadii:CGSizeMake(5.0f, 5.0f)]; 
    [maskLayer setPath:[path CGPath]]; 
    [maskLayer setFillColor:[[UIColor greenColor] CGColor]]; 
    bar.layer.masksToBounds = YES; 
    bar.layer.mask = maskLayer; 

Я также попробовал «клип подвидов», но он не работает.

Затем я попробую что-то еще, я просто скрыл фоновый вид (subview 0). Для удивления это все еще видно.

Есть ли какая-либо магия в UISearchBar? Маска работает на UIToolbar.

+1

Вы пробовали 'view.layer.cornerRadius'? –

ответ

0

Ваша проблема может быть связана с использованием свойства mask. Это не сработает, если вы добавите слой маски в слой, который уже является частью иерархии. Документы для CALayer сказать:

При установке mask на новый слой, superlayer нового слоя первый должен быть установлены в nil, в противном случае поведение не определенно.

Перед добавлением слоя маски вам нужно удалить панель поиска с ее superview. Оберните последнюю строку следующим образом:

UIView *superview = [bar superview]; 
[bar removeFromSuperview]; 
bar.layer.mask = maskLayer; 
[superview addSubview:bar]; 

Вы также можете использовать removeFromSuperlayer и addSublayer:, если вы предпочитаете. Кроме того, если ваша панель поиска не является самым верхним видом в вашей иерархии, обязательно узнайте, где она находится, и верните ее в нужное место, используя insertSubview:atIndex: или один из подобных методов.

+0

Спасибо, я попробую. – Slavik

Смежные вопросы