2017-03-09 2 views
0

저는 계산기를 만들고 있는데 세로로 최대 20 자리, 가로로 40 자리까지 지원할 것입니다.iOS/Swift에서 지정된 너비의 고정 너비 라벨을 만드는 방법은 무엇입니까?

최대 자릿수까지 표시되도록 레이블을 만들거나 크기를 조정하여 결과에서 숫자를 추가하거나 제거 할 때 크기가 계속 유지되지 않도록하려면 어떻게합니까?

코드 지금까지 시도했습니다.

let labelFont : UIFont = resultDigitsLabel.font; 
let originalString : String = "00000000000000000000"; 
let nsString : NSString = originalString as NSString; 
var labelSize : CGSize = nsString.size(attributes: [NSFontAttributeName: labelFont]); 
labelSize.height = 0; 
let labelRect : CGRect = resultDigitsLabel.frame; 
let newFrame :CGRect = CGRect(origin: labelRect.origin, size: labelSize); 
resultDigitsLabel.frame = newFrame; 

resultDigitsLabel.layer.borderWidth = 0.5; 
resultDigitsLabel.layer.cornerRadius = 5.0; 

지금까지 운이 원래 프레임 재설정 라벨의 크기를 조정 표시하지 않습니다 내가 추가하거나 (국경을 보면서) 자리를 프레임을 분리 할 때 또한 크기를 조정합니다.

프레임을 변경하여 너비를 설정하는 대신 제한 조건을 만들어야하는데 크기 제한이 없습니다.

기타 도움말?

감사합니다. 라벨이 속성을 추가

+0

레이블의 최대 너비는 화면의 너비가 될 수 있습니다. 그래서 레이블을 추가하고 레이블에 제약 조건 상수를 0으로 설정하여 후행 및 선행 제약을 추가합니다. 전체 화면 너비를 커버하고 가로 세로 20, 가로 40의 문자 수를 제한합니다. –

답변

0

제약이 가장 좋습니다. 라벨에 LeadingTrailing의 제약 조건을 부여하고 equal width에 수퍼 뷰를 제공하십시오. 가로 및 세로 모드 모두에서 지원됩니다.

+0

그래, 제약 조건을 추가 트릭, 답변 및 아래의 내 대답에 코드 샘플을 제공 않았다 않았다. –

0

시도 : - resultDigitsLabel.adjustsFontSizeToFitWidth = 사실

0

당신은 20 자리 또는 40 자리의 프레임을 계산하고 그 프레임 UILabel의의 프레임을 만들어야합니다.

let digits:NSString = "99999999999999999999" as NSString 
let idealFrame= digits.boundingRect(with: CGSize(width: CGFloat.infinity, height: 30), options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName:labelFont], context: nil).size 

이제이 프레임을 UILabel로 만들 수 있습니다.

+0

감사하지만이 코드 세그먼트 내 세그먼트에서 nsString.size 행과 동일한 값을 생성합니다. 문제는 여전히 레이블의 자릿수가 늘어남에 따라 화면 라벨이 계속 크기가 변경된다는 것입니다. –

0

위의 thewarri0r9에 따라 제약 조건을 추가하면 속임수가 적용됩니다.

let screenSize: CGRect = UIScreen.main.bounds; 
    let screenWidth = screenSize.width; 
    let constraintMargin = (screenWidth - labelSize.width)/2; 
    let leadingConstraint = NSLayoutConstraint(item: targetDigitsLabel, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: constraintMargin); 
    let trailingConstraint = NSLayoutConstraint(item: targetDigitsLabel, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: constraintMargin * -1); 
    view.addConstraints([leadingConstraint, trailingConstraint]);