2017-09-28 7 views
-1

나는 Swift에서 프로그래밍 방식으로 레이블을 만들려고 노력하고 있지만 문제는 데이터 모델에 따라 텍스트의 양이 바뀌어 레이블의 크기가 변할 수 있다는 것입니다.동적 라벨 크기를 프로그래밍 방식으로 신속하게 만드는 방법은 무엇입니까?

headerLabel.frame = CGRect(x: 0, y: 0, width: screenSize.width/2.5, height: screenSize.height/45) 
headerLabel.center = CGPoint(x: screenSize.width/2, y: 245) 

을하지만,이 경우 텍스트는 줄에서 열심히 작동하지 않습니다 높이를 코딩 단락에 이르는 금액 일 수있다 : 일반적으로 나는 텍스트를 알고하기 전에이 같은 레이블을 만들 것입니다. 어떤 양의 텍스트를 수용 할 수 있도록 레이블을 만드는 방법?

+0

줄 수를 0으로 설정합니다. – Shades

+0

프로그래밍 방식으로 완료되었으므로 프레임을 설정할 수 있습니까? – SwiftyJD

답변

2

당신은 그들을 문자열 높이와 폭을 계산하고 설정하려면 다음을 사용할 수 있습니다

import Foundation 
import UIKit 

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let width = "Hello World".stringWidth // 74.6 
     let height = "Hello World".stringHeight // 16.7 

     let headerLabel = UILabel() 
     headerLabel.frame = CGRect(x: 0, y: 0, width: width, height: height) 
     headerLabel.center = CGPoint(x: screenSize.width/2, y: 245) 
    } 
} 

extension String { 
    var stringWidth: CGFloat { 
     let constraintRect = CGSize(width: UIScreen.main.bounds.width, height: .greatestFiniteMagnitude) 
     let boundingBox = self.trimmingCharacters(in: .whitespacesAndNewlines).boundingRect(with: constraintRect, options: [.usesLineFragmentOrigin, .usesFontLeading], attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 14)], context: nil) 
     return boundingBox.width 
    } 

    var stringHeight: CGFloat { 
     let constraintRect = CGSize(width: UIScreen.main.bounds.width, height: .greatestFiniteMagnitude) 
     let boundingBox = self.trimmingCharacters(in: .whitespacesAndNewlines).boundingRect(with: constraintRect, options: [.usesLineFragmentOrigin, .usesFontLeading], attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 14)], context: nil) 
     return boundingBox.height 
    } 
} 
0

이 레이블은 정의 된 폭 아니라 정의 된 높이를 가지고있다. 높이는 레이블에있는 텍스트의 양에 의해 결정됩니다. 너비를 제거하면 레이블이 줄 바꿈을하지 않아 원하는 바가 표시되지 않습니다. 마지막에 호출 된 sizeToFit() 메서드는 레이블의 텍스트를 기반으로 침입해야하는 텍스트 줄 수를 알고 난 후 레이블의 높이를 설정합니다. 이것이 당신이 원하는 것이 아니라면 알려주십시오.

let label = UILabel() 
label.text = "scones" 
label.numberOfLines = 0 // 0 = as many lines as the label needs 
label.frame.origin.x = 32 
label.frame.origin.y = 32 
label.frame.size.width = view.bounds.width - 64 
label.font = UIFont.displayHeavy(size: 17) // my UIFont extension 
label.textColor = UIColor.black 
label.sizeToFit() 
view.addSubview(label) 
0

레이블 내장 텍스트에 레이블을 지정한 다음 프레임을 부여하면 레이블 내장 속성에 액세스 할 수 있습니다.

스위프트 3 :

let label = UILabel() 
label.text = "Your text here" 
label.textAlignment = .center 
label.font = UIFont.systemFont(ofSize: 14) 
label.frame = CGRect(x:0,y:0,width:label.intrinsicContentSize.width,height:label.intrinsicContentSize.width) 

당신이 intrinsicContentSize에 따라 몇 가지 조건을 확인할 수 있습니다.

희망이 있습니다.