2017-10-11 11 views
0

컨테이너 역할을하는 UIView가 있으며이 컨테이너의 너비는 가장 긴 String을 기반으로 동적으로 변경해야합니다. 그래서 문자열 길이에 따라 CGFloat/CGSize를 얻고 싶습니다. 그래도 가능합니까? 내가문자열 길이에 따라 CGFloat/CGSize를 얻는 방법은 무엇입니까?

+0

의 사용 가능한 복제 [텍스트 길이에 따라 UILabel의 폭을 계산하는 방법?] (https://stackoverflow.com/questions/3527494/how-to-calculate-uilabel-width-based-on -text-length) – Venkat

+0

@Venkat 링크를 제공해 주셔서 감사합니다. 불행히도 7 년 전 이었으므로 방법이 현재 가치가 떨어지는 이유는 무엇입니까? ( – Maja

+0

해당 링크의 모든 답변을 확인하십시오. 희망이 당신을 도울 것입니다. 'yourLabel.intrinsicContentSize.width'. 7 세 이전 대답은 또한 해결책을 줄 수 있습니다 ('boundingRect') : p – Venkat

답변

0

도움을 주셔서 감사합니다. @Venkat, 이것이 작동하는 해결책입니다. 에드 저

@objc func containerWidth() -> (CGFloat){ 
     let containerSize = self.myLabel.intrinsicContentSize 
     containerWidth = containerSize.width 
     return containerWidth 
    } 
0

당신은 폭이나 알려진 제공해야 문자열에 기초하고 싶은

myStringSize : CGSize = [longestString sizeWithFont:myFont 
         constrainedToSize:maximumSize 
         lineBreakMode:self.myLabel.lineBreakMode]; 

오히려 라벨을 내놓고보다

지금 감가 상각 가장 도움이 보인다 방법 ... 높이 :

extension String { 

    func getHeight(with width: CGFloat, font: UIFont) -> CGFloat { 
     let maxSize = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude) 
     let actualSize = self.boundingRect(with: maxSize, options: [.usesLineFragmentOrigin], attributes: [NSFontAttributeName: font], context: nil) 
     return actualSize.height 
    } 


    func getWidth(with height: CGFloat, font: UIFont) -> CGFloat { 
     let maxSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: height) 
     let actualSize = self.boundingRect(with: maxSize, options: [.usesLineFragmentOrigin], attributes: [NSFontAttributeName: font], context: nil) 
     return actualSize.width 
    } 
} 
0

1 - 먼저 당신이 원하는 것을 최대 크기를 정의 MaxWidth

귀하의 text에 대한
CGSize constraint = CGSizeMake(MaxWidth, CGFLOAT_MAX); 

2 속성 :

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont systemFontOfSize:FONT_SIZE], NSFontAttributeName, nil]; 

3 *이 얻을하는 방법입니다 paraRecttext에서 :

CGRect paraRect = [text boundingRectWithSize:constraint options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil]; 

3- * 마지막으로 크기 가져 오기 :

CGSize size = paraRect.size;