2017-10-11 8 views
0

私はコンテナとして機能し、このコンテナの幅は最も長いStringに基づいて動的に変更する必要があるUIViewを持っています。だから私は文字列の長さに基づいてCGFloat/CGSizeを取得したい、それはまだ可能ですか?文字列の長さに基づいてCGFloat/CGSizeを取得する方法は?

とても役に立ちそうな方法は今...

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

よりもむしろ、私はあなたが既知の幅またはを与えなければならない文字列

+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、これは動作するソリューションですED私

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

でそれをベースにしたいラベルにそれを基づかを減価償却されます身長:

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]; 

、4- *最後にサイズを取得:

CGSize size = paraRect.size; 
関連する問題