2016-11-17 1 views
0

Привет Я использовал следующий код, чтобы создать нижнюю границу к моей меткеКак создать только нижнюю границу для ярлыка?

CALayer *border = [CALayer layer]; 
    CGFloat borderWidth = 2; 
    border.borderColor = [UIColor darkGrayColor].CGColor; 
    border.frame = CGRectMake(0, _label.frame.size.height - borderWidth, _label.frame.size.width, _label.frame.size.height); 
    border.borderWidth = borderWidth; 
    [_label.layer addSublayer:border]; 
    _label.layer.masksToBounds = YES; 

Но граница рвется в половине знака. Как я могу это исправить. Заранее спасибо.

+1

Boss это работает для меня без ломки. Можно ли прикрепить снимок экрана? – MuraliMohan

+0

Возможный дубликат [CALayer: добавить границу только с одной стороны] (http://stackoverflow.com/questions/7022656/calayer-add-a-border-only-at-one-side) – sage444

+0

@MuraliMohan Он работает для меня тоже, но граница не полностью нарисована. –

ответ

0

Вам нужно рассчитать ширину метки на основе строки, а также шрифта, который вам нужен. Вы можете получить размер, как этот

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font 
        constrainedToSize:maximumLabelSize 
        lineBreakMode:yourLabel.lineBreakMode]; 

и использовать expectedLabelSize при установке рамки для ваших границ.

border.frame = CGRectMake(0, _label.frame.size.height - borderWidth, _expectedLabelSize.width , _label.frame.size.height); 

Надеюсь, это поможет. Счастливое кодирование !!

+0

Метка должна быть обернута на основе текста, но с помощью жесткого кодирования максимальный размер метки, как это поможет? –

+0

для упаковки вам необходимо использовать – luckyShubhra

+0

для упаковки вам необходимо использовать [yourlabel sizeToFit]; – luckyShubhra

1

Попробуйте,

CALayer* layer = [lbl layer]; 
    CALayer *bottomBorder = [CALayer layer]; 
    bottomBorder.borderColor = [UIColor darkGrayColor].CGColor; 
    bottomBorder.borderWidth = 1; 
    bottomBorder.frame = CGRectMake(-1, layer.frame.size.height-1,layer.frame.size.width, 1); 
    [bottomBorder setBorderColor:[UIColor blackColor].CGColor]; 
    [layer addSublayer:bottomBorder]; 

check demo

+0

Это также относится к половине ярлыка. –

+0

Нет чувака, это нарисована фактическая ширина метки, по этому коду CALayer * layer = [lbl layer]; bottomBorder.frame = CGRectMake (-1, layer.frame.size.height-1, layer.frame.size.width, 1) см. Также скриншот. –

0

Пожалуйста, попробуйте с помощью следующего кода.

UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 50)]; 

[lbl setText: @ "Testo di prova ..."];

[lbl setBackgroundColor: [UIColor clearColor]];

[[self view] addSubview: lbl];

[lbl sizeToFit];

CALayer * layer = [lbl layer];

CALayer * bottomBorder = [CALayer layer];

нижнийBorder.областиColor = [UIColor darkGrayColor] .CGColor;

нижнийBorder.borderWidth = 1;

bottomBorder.frame = CGRectMake (-1, layer.frame.size.height-1, layer.frame.size.width, 1);

[нижнийBorder комплектBorderColor: [UIColor черныйColor] .CGColor];

[layer addSublayer: bottomBorder];

1

Вы можете сделать так:

С использованием CALayer вы можете создать границу UILabel или любой другой UIControl.

1) Нижняя граница

CALayer *bottomBorder = [CALayer layer]; 
bottomBorder.borderColor = [UIColor blackColor].CGColor; 
bottomBorder.borderWidth = 1; 
bottomBorder.frame = CGRectMake(0, CGRectGetHeight(myLabel.frame)-1, CGRectGetWidth(myLabel.frame), 1); 
myLabel.clipsToBounds = YES; 
[myLabel.layer addSublayer:bottomBorder]; 

2) Верхняя граница

CALayer *topBorder = [CALayer layer]; 
topBorder.borderColor = [UIColor blackColor].CGColor; 
topBorder.borderWidth = 1; 
topBorder.frame = CGRectMake(0, 0, CGRectGetWidth(myLabel.frame), 1); 
myLabel.clipsToBounds = YES; 
[myLabel.layer addSublayer:topBorder]; 

3) Левый Пограничный

CALayer *leftBorder = [CALayer layer]; 
leftBorder.borderColor = [UIColor blackColor].CGColor; 
leftBorder.borderWidth = 1; 
leftBorder.frame = CGRectMake(0, 0, 1, CGRectGetHeight(myLabel.frame)); 
myLabel.clipsToBounds = YES; 
[myLabel.layer addSublayer:leftBorder]; 

4) Право Border

CALayer *rightBorder = [CALayer layer]; 
rightBorder.borderColor = [UIColor blackColor].CGColor; 
rightBorder.borderWidth = 1; 
rightBorder.frame = CGRectMake(CGRectGetWidth(myLabel.frame)-1, 0, 1, CGRectGetHeight(myLabel.frame)); 
myLabel.clipsToBounds = YES; 
[myLabel.layer addSublayer:rightBorder];