2016-12-27 13 views
0

テキストサイズに合わせてラベルのサイズを変更しようとしていますが、回答がhereの場合、もう少し説明が必要です。通貨、整数量、重量::値に合わせてラベルのサイズを変更する

enter image description here

私が原因通貨と二重の量の両方が整数のとは異なるスタイルを持っているという事実に3つのラベルを持つ

私にとっては、私は3つのラベルを持っています量。私がこれを間違った方法で行っているなら、3つすべてのラベルを1つしか持てないので、私を修正してください。

すべての3つはtop-right

の自動サイズ変更を持って最終的に、私は静的な値を削除する必要がありますが、私は以下のコードを適用すると、作品に注目する:

のviewDidLoad()またはviewDidAppear():

integerAmountLabel.sizeToFit() 

integerAmountLabel.text = "1" 
// or integerAmountLabel = "280,000" 

期待:£1.00または£280,000.00です。私が得たもの:£1 .00または£ 1.00

+0

あなたは 'autoLayout'を使用していますか? – Rikh

+0

@Rikhはい私です。 – Sylar

+0

最初にテキストをlableに設定し、ラベルのsizeToFitメソッドを呼び出します。 –

答えて

2

アマンGupta氏は、すでに述べたように、使用することは、文字列を考えました。ここでそれを行う方法を説明する遊び場の抜粋です:

import UIKit 
import PlaygroundSupport 

var str = "Hello, playground" 

let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 300)) 
PlaygroundPage.current.liveView = view 

// set up view hierarchy 
view.backgroundColor = .blue 
let label = UILabel() 
label.translatesAutoresizingMaskIntoConstraints = false 
view.addSubview(label) 
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[label]-|", options: NSLayoutFormatOptions(rawValue:0), metrics: nil, views: ["label": label])) 
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[label]-|", options: NSLayoutFormatOptions(rawValue:0), metrics: nil, views: ["label": label])) 

// set up atributes 
let currencyAttributes = [NSFontAttributeName: UIFont.boldSystemFont(ofSize: 20), NSForegroundColorAttributeName: UIColor.white] 
let integerAmountAttributes = [NSFontAttributeName: UIFont.boldSystemFont(ofSize: 30), NSForegroundColorAttributeName: UIColor.white] 
let decimalAmountAttributes = [NSFontAttributeName: UIFont.boldSystemFont(ofSize: 16), NSForegroundColorAttributeName: UIColor(white: 1, alpha: 0.7)] 


// set up formatter 
let formatter = NumberFormatter() 
formatter.numberStyle = NumberFormatter.Style.currency 
formatter.locale = Locale(identifier: "en_GB") 

let amount = 8001.9 
let text = formatter.string(from: NSNumber(value: amount))! 
let nsText = text as NSString 

// calculate ranges 
let currencyRange = NSRange(location: 0, length: 1) 
let decimalPointRange = nsText.range(of: ".") 
var integerAmountLocation = currencyRange.location + currencyRange.length 
var integerAmountLength = decimalPointRange.location - integerAmountLocation 
var integerAmountRange = NSRange(location: integerAmountLocation, length: integerAmountLength) 

// configure attributed string 
var attributedText = NSMutableAttributedString(string: text, attributes: decimalAmountAttributes) 
attributedText.setAttributes(currencyAttributes, range: currencyRange) 
attributedText.setAttributes(integerAmountAttributes, range: integerAmountRange) 

label.attributedText = attributedText 

Result

あなたはここで全体の遊び場を取得することができます:https://github.com/AleksanderMaj/AttributedString

+0

はいサー。私はこれを受け入れます。非常に便利。 'currencyAttributes'など他の場所で再利用する必要があるので、いくつかの定数を作成する必要があります。 – Sylar

+1

Foundationには、通貨のフォーマットを簡素化し、ロケールに依存するNumberFormatterクラスがあります。 'NumberFormatter.Style.currency' 回答を更新します –

1

あなたは、これはすべてのあなたの問題を解決する一つのラベルを使用することができますし、また、あなたのラベルstyles.Thisと妥協する必要はありませんがNSAttributedStringを使用することによって達成することができます。下の例は、あなたが参照できる出力を示しています。

let string = NSMutableAttributedString(string: "1000.12") 
    string.addAttribute(NSFontAttributeName,value: UIFont.systemFont(ofSize: 25.0), range: NSRange(location: 0, length: 4)) 
    string.addAttribute(NSFontAttributeName,value: UIFont.systemFont(ofSize: 10.0), range: NSRange(location: 5, length: 2)) 

enter image description here

+0

これをラベルにどのように正確に設定しますか? – Sylar

+0

UILabelのattributedTextプロパティを使うだけで、これをラベルに設定することができます。 label.attributedText = string –

+0

小さな 'を得ることはできません。12 'というラベルにフォントサイズを設定しているので、 – Sylar

関連する問題