O uIlabel layer.cornerRadius não funciona no iOS 7.1


189

Atualmente, estou olhando para um UILabel com a propriedade addMessageLabel.layer.cornerRadius = 5.0f;Em um dispositivo com iOS 7.0 instalado, ele tem cantos arredondados. Em um dispositivo com o iOS 7.1 instalado, ele não possui cantos arredondados.

Isso é apenas um bug no iOS 7.1?

Respostas:


490

Defina a propriedade clipsToBoundscomo true

addMessageLabel.clipsToBounds = true

3
Não sei por que você não fez isso no iOS 7, mas no iOS 7.1, mas funcionou! Obrigado
Mike V

11
Não, não é estranho ... apenas "progresso" ... <humf>, parece que o clipsToBounds do UILabel agora está padronizado como FALSE como a maioria dos outros UIViews. A Apple provavelmente está tentando tornar os itens mais consistentes. Eu também tive o mesmo problema.
Leslie Godwin

2
@ChristopherKing eu não poderia encontrar documentação sobre isso, mas isso funcionou no meu cenário também, surpreender eu acho :)
Raheel Sadiq

3
Agradeça aos desenvolvedores pelo Stack Overflow.
scrrr

1
Obrigado amigo Você economizou meu tempo (Y).
Akhtar 29/05

66

Eu acho que a melhor maneira de definir o raio dos cantos é:

insira a descrição da imagem aqui

e verifique se a opção "Subvisões de clipes" está marcada:

insira a descrição da imagem aqui

A verificação de "Subviews de clipe" é igual ao código addMessageLabel.clipsToBounds = YES;.


Definitivamente, a maneira mais fácil
Mário Carvalho

Esta é a melhor maneira. Testado com ios 8+ e xcode 7.2.
lifeisfoo

Se alguém veio aqui procurando por isso e não funcionou: se você colocar a propriedade "cornerRadius", ela funcionará no iOS10 +. Em iOS9 que tem que ser "layer.cornerRadius"
Nathan Barreto

ClipToBounds também pode ser definido no User Defined Atributos de tempo de execução (o mesmo que o layer.cornerRadius): deve ser Path chave: clipsToBounds, digite: booleano, valor: true
Chuy47

24

Tente o seguinte,

[[addMessageLabel layer] setCornerRadius:5.0f];
[[addMessageLabel layer] setMasksToBounds:YES];

//or
[addMessageLabel setClipsToBounds:YES];

Rápido

addMessageLable.layer.cornerRadius = 5.0
addMessageLable.layer.masksToBounds = true

//or
addMessageLable.layer.clipsToBounds = true

5

Meu problema foi um pouco diferente.

Enquanto eu fiz fazer btn.clipsToBounds = true

Eu não estava começando a fazer:

btn.layer.cornerRadius = 20

Porque eu tinha tamanhos de tela diferentes. Em vez disso, segui esta resposta e fiz:

override func layoutSubviews() {
    seeMoreButton.layer.cornerRadius = seeMoreButton.bounds.size.height / 2
}

Não estava funcionando porque eu esqueci de adicionar super.layoutSubviews(). O código correto é:

override func layoutSubviews() {
    super.layoutSubviews()
    seeMoreButton.layer.cornerRadius = seeMoreButton.bounds.size.height / 2
}

Muito obrigado .. Somente essa resposta funcionou para mim. Swift 3, Xcode 8.3.3
Skywalker

3

Eu tentei o abaixo e eu tenho uma saída bem sucedida.

yourlabelname.layer.cornerRadius = 10.0f;
[yourlabelname setClipsToBounds:YES];

Existe algo mais que está te impedindo?


Antes do iOS 7.1, clipsToBoundshavia o padrão YES, então a linha [yourlabelname setClipsToBounds:YES];não estava no meu código original.
Mike V

0
 //works perfect in Swift 2.0 for a circular or round image          


@IBOutlet var theImage: UIImageView!
        override func viewDidLoad() {
            super.viewDidLoad()
    //Make sure the width and height are same
            self.theImage.layer.cornerRadius = self.theImage.frame.size.width / 2
            self.theImage.layer.borderWidth = 2.0
            self.theImage.layer.borderColor = UIColor.whiteColor().CGColor
            self.theImage.clipsToBounds = true

        }

0
yourlabelname.layer.cornerRadius = yourlabelname.frame.size.width/2;
[yourlabelname setClipsToBounds:YES];

Verifique se você está verificando com o destino de implantação apropriado.


0

Adicione o seguinte código como extensão para UIView

//// Story board Extra Feature for create border radius, border width and border Color
extension UIView {
    /// corner radius
    @IBInspectable var borderColor: UIColor? {
        set {
            layer.borderColor = newValue!.cgColor
        }
        get {
            if let color = layer.borderColor {
                return UIColor(cgColor: color)
            } else {
                return nil
            }
        }
    }
    @IBInspectable var borderWidth: CGFloat {
        set {
            layer.borderWidth = newValue
        }
        get {
            return layer.borderWidth
        }
    }
    @IBInspectable var cornerRadius: CGFloat {
        set {
            layer.cornerRadius = newValue
            clipsToBounds = newValue > 0
        }
        get {
            return layer.cornerRadius
        }
    }
}

Depois disso, você obterá os seguintes atributos no próprio construtor de interfaces.!

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.