2016-11-03 3 views
3

테두리와 테두리 사이에 공백을 넣으려면 내 레이블 안에 패딩을 추가하고 싶습니다. UILabel에서 확장 한 클래스를 만들었습니다.UILabel 테두리 및 패딩

UILabelPadding.swift :

import UIKit 

class UILabelPadding: UILabel { 

    let padding = UIEdgeInsets(top: 30, left: 30, bottom: 30, right: 30) 
    override func drawText(in rect: CGRect) { 
     super.drawText(in: UIEdgeInsetsInsetRect(rect, padding)) 
    } 

    override var intrinsicContentSize : CGSize { 
     let superContentSize = super.intrinsicContentSize 
     let width = superContentSize.width + padding.left + padding.right 
     let heigth = superContentSize.height + padding.top + padding.bottom 
     return CGSize(width: width, height: heigth) 
    } 

    override func sizeThatFits(_ size: CGSize) -> CGSize { 
     let superSizeThatFits = super.sizeThatFits(size) 
     let width = superSizeThatFits.width + padding.left + padding.right 
     let heigth = superSizeThatFits.height + padding.top + padding.bottom 
     return CGSize(width: width, height: heigth) 
    } 


} 

내가 UILabelPadding에 UILabel의에서 myLabel의 유형을 변경했습니다. 내의 UIViewController에서, 나는 sizeToFit을 (전화, myLabel의 텍스트를 설정)하고 그 후 나는 myLabel에 테두리와 배경 색상을 추가

myLabel.text = "label test" 
    myLabel.sizeToFit() 
    //background + border 
    myLabel.layer.borderColor = UIColor(red: 27/255, green: 100/255, blue: 90/255, alpha: 1.0).cgColor 
    myLabel.layer.backgroundColor = UIColor(red: 27/255, green: 100/255, blue: 90/255, alpha: 1.0).cgColor 
    myLabel.layer.cornerRadius = 9 
    myLabel.layer.masksToBounds = true 
    myLabel.layer.borderWidth = 1 

테두리와 배경 색상이 추가되지만 패딩은 아니다 일. 디버깅 할 때 sizeThatFits()는 호출되지 않습니다.

도움이 필요하십니까?

+0

이 방법을 시도해보십시오 myLabel.sizeThatFits (CGSizeMake (LABEL_WIDTH, CGFLOAT_MAX)) –

+0

나는 이것을 UILabel 유형으로 시도해야합니까? 그리고 높이는 어떨까요? –

+0

나는 그것을 테스트하고 나는이 오류가 발생했다 : Xcode (8.0 중 하나)의 마지막 버전을 가지고 있기 때문에 신속하게 cgsizemake를 사용할 수 없다. –

답변

6

나는 문제를 해결했습니다!

1- UILabel의에서 확장 클래스를 확인하십시오 : 방법 같은 문제에 직면하고 사람들을 위해

UILabelPadding.swift :

class UILabelPadding: UILabel { 

    let padding = UIEdgeInsets(top: 2, left: 8, bottom: 2, right: 8) 
    override func drawText(in rect: CGRect) { 
     super.drawText(in: UIEdgeInsetsInsetRect(rect, padding)) 
    } 

    override var intrinsicContentSize : CGSize { 
     let superContentSize = super.intrinsicContentSize 
     let width = superContentSize.width + padding.left + padding.right 
     let heigth = superContentSize.height + padding.top + padding.bottom 
     return CGSize(width: width, height: heigth) 
    } 



} 

2는 라벨의 유형을 설정합니다 UILabelPadding을 사용하고 유형이 스토리 보드에도 설정되어 있는지 확인하십시오.

+0

하지만 코드를 사용할 때 텍스트 당 레이블 높이가 설정되지 않고 패딩 당 라벨 텍스트가 잘리지 않습니다 –

2

설명하는 것을 많이하는 레이블 하위 클래스를 사용합니다.

class MyBoundedLabel: UILabel { 
    override func drawText(in rect: CGRect) { 
     let context = UIGraphicsGetCurrentContext()! 
     context.stroke(self.bounds.insetBy(dx: 1.0, dy: 1.0)) 
     super.drawText(in: rect.insetBy(dx: 5.0, dy: 5.0)) 
    } 
} 

숫자 및 기타 세부 정보를 시도해보고 원하는대로 보이도록 시도해보십시오.

+0

dx와 dy는 무엇입니까? –

+0

말할 것도 없습니다. 이 코드는 바로 사용할 수있는 코드입니다. 이들은 모두 내장 된 메소드입니다. – matt

+0

작동하지 않습니다. 왜 그런지 모르겠다 –

0

이 클래스를 사용해보세요. 나는 네가 원하는 패딩을 얻을 것이라고 믿는다.

class CustomLabel: UILabel { 


    var padding:UIEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0) 

    required init(frame: CGRect, padding: UIEdgeInsets) { 
     super.init(frame: frame) 
     self.padding = padding 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func drawText(in rect: CGRect) { 
     let changedRect: CGRect = CGRect(x: (rect.origin.x + padding.left), y: (rect.origin.y + padding.top), width: (rect.size.width - (padding.left + padding.right)), height: (rect.size.height - (padding.top + padding.bottom))) 
     super.drawText(in: changedRect) 
    } 

} 

다음과 같이 구현하십시오.

let label:CustomLabel = CustomLabel(frame: CGRect(x: 0, y: 20, width: self.view.frame.size.width, height: 60), padding: UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)) 
    label.text = "Hello world, baby ldsnvldnvsdnds,nv,svn,vn," 
    label.textColor = UIColor.blue 
    label.font = UIFont.boldSystemFont(ofSize: 15) 
    label.textAlignment = NSTextAlignment.left 
    label.layer.borderColor = UIColor.black.cgColor 
    label.layer.borderWidth = 1 
    self.view.addSubview(label) 

나는 이것을 사용하여 패딩을 얻었다. 작동하지 않는 경우 언제든지 회신 해주십시오. 언제든지 편집을 제안 해 주시기 바랍니다 :)

+0

고맙습니다.하지만 이미 해결책을 찾았습니다. 너는 그것을 볼 수있다 :) –