2

これはIBLabel、フォントを追跡/引き伸ばす です。

ビルドで完全に機能します。ただし、変更はストーリーボードにライブで表示されません。

// UILabel, but you can set
// the tracking (that's the overall amount of space between all letters)
// and streching (actually squeeze or stretch the letters horizontally)
// Note: it's very common that typographers need you to adjust these.

import UIKit

@IBDesignable
class StyledLabel: UILabel
    {
    @IBInspectable var tracking:CGFloat = 0.8
    // values between about 0.7 to 1.3.  one means normal.

    @IBInspectable var stretching:CGFloat = -0.1
    // values between about -.5 to .5.  zero means normal.

    override func awakeFromNib()
        {
        let ats = NSMutableAttributedString(string: self.text!)
        let rg = NSRange(location: 0, length: self.text!.characters.count)

        ats.addAttribute(
            NSKernAttributeName, value:CGFloat(tracking), range:rg )

        ats.addAttribute(
            NSExpansionAttributeName, value:CGFloat(stretching), range:rg )

        self.attributedText = ats
        }
    }

右側のシミュレーターは完璧に機能します。

ここに画像の説明を入力

実際にはストーリーボードにライブで表示されません (左を参照)。

ワイルドな推測ですが、初期化機能がありませんか?

または、何が問題なのですか?


注 - 高さに合わせてフォント サイズを設定します。

すべてのデバイスでラベル フレームを埋めるようにフォント サイズを設定することができます。タイピングを節約するために、「高さのポイント」、追跡、ストレッチを行うクラスを次に示します。

4

1 に答える 1

4

また、コードを 内に配置する必要がありますprepareForInterfaceBuilder()。実行時ではなく、インターフェイス ビルダーでのみ呼び出されます。

override func prepareForInterfaceBuilder() {
    let ats = NSMutableAttributedString(string: self.text!)
    let rg = NSRange(location: 0, length: self.text!.characters.count)

    ats.addAttribute(
        NSKernAttributeName, value:CGFloat(tracking), range:rg )

    ats.addAttribute(
        NSExpansionAttributeName, value:CGFloat(stretching), range:rg )

    self.attributedText = ats
}
于 2016-05-18T12:48:27.960 に答える