2013-06-04 4 views
6

私はポイントサイズ17のフォントでUILabelを持っています。私がlabel.font.pointSizeを呼び出すと、17が得られます。 BBUUUUTTTまた、ポイントサイズが小さくなるのを引き起こすラベルのテキストを詰め込んでlabel.font.pointsizeを呼び出すと、minimumfontsizeを8に設定しました。ポイントサイズが小さいとわかっていてもまだ17になりますminimumFontSizeの後にUILabelフォントのポイントサイズを取得します

システムがフォントのサイズを変更した後、本当のポイントサイズを取得する方法はありますか?

+0

直接ではなく、あなたがそれを計算することができます。最初の答えはこちら:http://stackoverflow.com/questions/3669844/how-to-get-uilabel-uitextview-auto-adjusted-font-size – savner

+0

「UILabel」は私有財産の情報を持っているので迷惑です'_UILabelScaledMetrics'のインスタンスである' _scaledMetrics'と呼ばれるものです。そのクラスには '_actualScaleFactor'プロパティがあります。しかし、それは一般に公開されていないので学者全員。 – ChrisH

答えて

2

savnerはコメントで指摘したように、これは重複質問です。最もきれいな解決策はここにあります:How to get UILabel (UITextView) auto adjusted font size?。しかし、Sanjitのソリューションも機能します!みなさんありがとう!

CGFloat actualFontSize; 
[label.text sizeWithFont:label.font 
     minFontSize:label.minimumFontSize 
     actualFontSize:&actualFontSize 
      forWidth:label.bounds.size.width 
     lineBreakMode:label.lineBreakMode]; 
+1

誰でもこのソリューションをSwiftに翻訳できますか? – Narwhal

+0

@Narwhal Swiftの私の解決策は、Objective-Cでサブクラスまたはカテゴリを作成し、それをSwiftで使用することです。このメソッドは推奨されていませんが、実際のフォントサイズを取得する代替方法はないため、お勧めしません。 – Adam

4

UILabelの現在のポイントサイズを取得するためのAPIがわかりませんが、コンテンツを縮小しています。 sizeWithFont APIを使用して、「スケーリング係数」を近似することができます。

ジャストアイデア:

// Get the size of the text with no scaling (one line) 
CGSize sizeOneLine = [label.text sizeWithFont:label.font]; 

// Get the size of the text enforcing the scaling based on label width 
CGSize sizeOneLineConstrained = [label.text sizeWithFont:label.font constrainedToSize:label.frame.size]; 

// Approximate scaling factor 
CGFloat approxScaleFactor = sizeOneLineConstrained.width/sizeOneLine.width; 

// Approximate new point size 
CGFloat approxScaledPointSize = approxScaleFactor * label.font.pointSize; 
+0

本当にうまくいくと思われます。ありがとうございました! – MobileMon

0

スウィフト4のiOS 7+ @Sanjit Salujaの答えのバージョン(sizeWithFontが廃止された):

// Get the size of the text with no scaling (one line) 
let sizeOneLine: CGSize = label.text!.size(withAttributes: [NSAttributedStringKey.font: label.font]) 

// Get the size of the text enforcing the scaling based on label width 
let sizeOneLineConstrained: CGSize = label.text!.boundingRect(with: label.frame.size, options: .usesLineFragmentOrigin, attributes: [NSAttributedStringKey.font: label.font], context: nil).size 

// Approximate scaling factor 
let approxScaleFactor: CGFloat = sizeOneLineConstrained.width/sizeOneLine.width 

// Approximate new point size 
let approxScaledPointSize: CGFloat = approxScaleFactor * label.font.pointSize 
関連する問題