読者です 読者をやめる 読者になる 読者になる

Swift,Objective-Cプログラミング ~ iOS ~

Objective-C,Swift,Apple Watchなどのプログラミング

【iOS Swift入門 #290】文字列・テキストをUILabelに表示するために必要な領域サイズを計算する

Swift Swift3.0 Swift基本文法 iOS プログラミング 入門

はじめに

文字列・テキストの表示に必要な領域サイズを得るときに、
NSStringやNSAttributedStringクラスの
boundingRect(with:options:context:)メソッドを使う。

このメソッドで得た領域サイズでUILabelを作成し、
文字列をセットし、画面表示してみると、
切れて表示されるということがある。

UILabelに表示できるサイズを得る処理を作った。

この記事を読んでわかること

  • 文字列・テキストをUILabelに表示するために必要な領域サイズを計算する方法

やりかた

ソース

extension String{
    // calculate label size to show
    func size(for label:UILabel) -> CGSize{
        let alabel = label.clone()
        alabel.text = self
        alabel.sizeToFit()
        
        return alabel.bounds.size
    }
}

extension UILabel{
    // clone UILabel object
    func clone() -> UILabel{
        let data = NSKeyedArchiver.archivedData(withRootObject: self)
        return NSKeyedUnarchiver.unarchiveObject(with: data) as! UILabel
    }
}

文字列がぴったり入るUILabelのサイズを得られる。
f:id:fjswkun:20161120122031p:plain

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // string
        let str = "Hello, World!!!"
        
        // initialize UILabel
        let label = UILabel(frame: CGRect.zero)
        label.backgroundColor = .cyan
        label.text = str
        
        // calculate label size to show
        let size = str.size(for: label)
        
        // add
        label.frame = CGRect(origin: CGPoint.zero, size: size)
        label.center = view.center
        view.addSubview(label)
    }
}

サンプルソースのダウンロード

こちらからダウンロード。
SampleGetLabelSize.zip - Google ドライブ

参考情報

Swift

iOSアプリ開発未経験の人向け
・Swift初心者の人に評判が良いようですね


・わかりやすくていい、と聞いた本
立ち読みした感じだと【アプリ作成未経験の人向け】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】


②を終えたくらいの知識の方向け
・アプリ開発独学中に2冊めに購入した書籍
プログラミング知識はなくても、若干理解するのに時間がかかる程度で、
読み進められるわかりやすさがある。

iPhoneアプリ開発塾

iPhoneアプリ開発塾


③中級者、上級者向け

詳解 Swift

詳解 Swift

詳解 Swift 改訂版

詳解 Swift 改訂版