UILabelの位置やフォント、背景色などの細かな設定方法を紹介します。
Xcode 13.4.1
UILabel
目次
ラベルテキスト
UILabelでStoryboardを使わない場合の最低限必要な記述は、frameの位置サイズは適当な値を使うとこのようになります。
1 2 3 4 5 6 7 8 |
override func viewDidLoad() { super.viewDidLoad() let label = UILabel() label.frame = CGRect(x:150, y:200, width:160, height:30) label.text = "Test" self.view.addSubview(label) } |
これを基本として、色々と設定を加えてみたいと思います。
- テキストの色:textColor
- 定番の色を設定する場合はPredefined Colorsを使えば簡単にできます。
12// テキスト色を青に設定label.textColor = UIColor.blue
- Specific Color Spaceを使えばRGBと透明度を詳細に設定できます。
123// 半透明のエメラルド色let rgba = UIColor(red: 0.1, green: 0.7, blue: 1.0, alpha: 0.5)label.textColor = rgba
- 定番の色を設定する場合はPredefined Colorsを使えば簡単にできます。
- フォント:font
- デフォルトでsystemFontが使われておりサイズの設定はofSizeを使います。
12// システムフォントをサイズ36に設定label.font = UIFont.systemFont(ofSize: 36)
- この他のシステムフォントは
太文字:boldSystemFont(ofSize: CGFloat)
イタリック体: italicSystemFont(ofSize: CGFloat)
Monospace: monospacedDigitSystemFont(ofSize: CGFloat, weight: CGFloat)
などがあります。
1234label.font = UIFont.boldSystemFont(ofSize: 17)label.font = UIFont.italicSystemFont(ofSize: 17)label.font = UIFont.monospacedDigitSystemFont(ofSize: 17,weight: UIFont.Weight(0.1))
- システムフォント以外のfontの名前とサイズを指定することもできます。その前にどんなフォントが使えるか調べるには以下のコードを実行すると分かります。
デバッグエリアに表示
12345678let familyNames : Array = UIFont.familyNames;let len = familyNames.count;for i in 0 ..< len {let fontFamily = familyNames[i] as String;let fontNames = UIFont.fontNames(forFamilyName: fontFamily);print("\(fontFamily),\(fontNames)")}
たくさん出てきた中の1つ “Copperplate-Lite” を使ってみます。
12// init?(name: String, size: CGFloat)label.font = UIFont(name: "Copperplate-Light", size: 24)
- デフォルトでsystemFontが使われておりサイズの設定はofSizeを使います。
- テキスト中央寄せ(左右寄せ):textAlignment
- テキストのalignmentを設定、左・中央・右寄せです。分かりやすくする為に、UILabelのサイズをマージンをいれた横幅いっぱいまで広げます。
12345678910// スクリーンサイズを取得let screenWidth:CGFloat = view.frame.size.widthlabel.frame = CGRect(x:10, y:200, width:screenWidth-20, height:30)// テキストを中央寄せlabel.textAlignment = NSTextAlignment.center// テキストを左寄せlabel.textAlignment = NSTextAlignment.left// テキストを右寄せlabel.textAlignment = NSTextAlignment.right
- テキストのalignmentを設定、左・中央・右寄せです。分かりやすくする為に、UILabelのサイズをマージンをいれた横幅いっぱいまで広げます。
- 複数行:numberOfLines
- ラベルの高さをいくら高くしてもデフォルトでは1行しかテキストが表示されません。テキストの最大行数まで表示するにはnumberOfLinesを0にしてラベル高を高くします。
1234567891011121314151617// heightを4行入るように大きくするlabel.frame = CGRect(x:150, y:200, width:160, height:100)// 文字列を改行コードを使って4行label.text = "Test0\nTest1\nTest2\nTest3"// Swift4からは改行コード無しでも可能label.text = """Test0Test1Test2Test3"""// 最大行まで行数表示できるようにするlabel.numberOfLines = 0//label.numberOfLines = 2
この設定で numberOfLines=2 にして制限するとこのようになります。
- ラベルの高さをいくら高くしてもデフォルトでは1行しかテキストが表示されません。テキストの最大行数まで表示するにはnumberOfLinesを0にしてラベル高を高くします。
- テキストの影:shadowColor, shadowOffset
- 色とオフセットを設定してテキストに影を付けられます。
123// テキストの影、色とオフセットlabel.shadowColor = UIColor.cyanlabel.shadowOffset = CGSize(width: 2, height: 2)
- 色とオフセットを設定してテキストに影を付けられます。
ラベル背景色
- backgroundColor
- 背景色は backgroundColor にUIColorを設定します。Predefined ColorsやあるいはSpecific Color Spaceを使えば半透明もできます。
123456789101112131415//let label = UILabel()// 背景のスクリーンに対するマージンlet margin:CGFloat = 50// スクリーンサイズを取得let screenWidth:CGFloat = view.frame.size.widthlabel.frame = CGRect(x: margin, y:200, width:screenWidth-(margin*2), height:30)label.text = "Test"// ラベルの背景色、ライトグレーlabel.backgroundColor = UIColor.lightGrayself.view.addSubview(label)
- 背景色は backgroundColor にUIColorを設定します。Predefined ColorsやあるいはSpecific Color Spaceを使えば半透明もできます。
ラベル位置サイズ
UIViewの位置設定として以下のものがあります。(UILabelはUIViewの下位階層にあるので同様に使えます)
- frame
- 既にこれまで使っているのですが、ラベルの位置とサイズはframeに設定します。下の例ではラベル枠の左上の位置が(0, 0)になり、そこからラベル枠の横幅と高さ100を設定したものです。frame.sizeを使うとサイズのみの設定もできます。
1234567891011121314// UILabelのインスタンス作成//let label = UILabel()// ラベルのサイズlabel.frame = CGRect(x:0, y:0, width: 100, height: 100);// ラベルテキスト設定label.text = "Test"// ラベルの背景色label.backgroundColor = UIColor.lightGray// viewに追加self.view.addSubview(label)
iPhone X系は Safe Area を考慮する必要があります。
- 既にこれまで使っているのですが、ラベルの位置とサイズはframeに設定します。下の例ではラベル枠の左上の位置が(0, 0)になり、そこからラベル枠の横幅と高さ100を設定したものです。frame.sizeを使うとサイズのみの設定もできます。
- transform
- UIViewを移動・回転・拡大縮小させる場合に使います。CGAffineTransformについて詳しくはこちら
123456789// 35度回転let angle = 35 * CGFloat.pi / 180let trans1 = CGAffineTransform(rotationAngle: CGFloat(angle));label.transform = trans1// 移動let trans2 = CGAffineTransform(translationX: 150, y: 300)// 2つのアフィンを組み合わせlet trans3 = trans1.concatenating(trans2);label.transform = trans3
- UIViewを移動・回転・拡大縮小させる場合に使います。CGAffineTransformについて詳しくはこちら
- center
- Labelを横の中央にしたい時はcenterを設定すれば可能です。例えばスクリーン中央にLabelの中心を持ってくる場合はこのようにします。
1234567891011// スクリーンサイズを取得let screenWidth:CGFloat = view.frame.size.widthlet screenHeight:CGFloat = view.frame.size.height// ラベルのサイズlabel.frame.size = CGSize(width: 100, height: 100);// ラベルの背景色label.backgroundColor = UIColor.lightGray// ラベルのセンターの位置をスクリーン中央に設定label.center = CGPoint(x: screenWidth/2, y: screenHeight/2)
- Labelを横の中央にしたい時はcenterを設定すれば可能です。例えばスクリーン中央にLabelの中心を持ってくる場合はこのようにします。
- bounds
- ローカルな位置サイズになります。frameはスクリーン、SuperViewでの絶対位置サイズです。一方、boundsはローカルなそのViewでの位置サイズとなります。例えばラベルをスクリーン中央に設定した後でboundsで設定するとこのようになりますが
12label.center = CGPoint(x: screenWidth/2, y: screenHeight/2)label.bounds = CGRect(x:0, y:0, width: 100, height: 100);
frameで設定をすると絶対位置サイズとなってcenterがキャンセルされてしまいます。
12label.center = CGPoint(x: screenWidth/2, y: screenHeight/2)label.frame = CGRect(x:0, y:0, width: 100, height: 100);
- ローカルな位置サイズになります。frameはスクリーン、SuperViewでの絶対位置サイズです。一方、boundsはローカルなそのViewでの位置サイズとなります。例えばラベルをスクリーン中央に設定した後でboundsで設定するとこのようになりますが
- layer.position
- layerの位置を決める形で位置調整ができます。
123label.frame = CGRect(x:0, y:0, width: 100, height: 100);// ラベルレイヤーの位置決めlabel.layer.position = CGPoint(x: 100, y: 200);
- layerの位置を決める形で位置調整ができます。
- frame.origin
- ラベルの左上originを位置として設定することもできます。
123label.frame = CGRect(x:0, y:0, width: 100, height: 100);// ラベルの左上originを位置として設定label.frame.origin = CGPoint(x: 260, y: 600)
frame.origin.x、 frame.origin.y を使うと位置を調べられます。
1234567label.frame = CGRect(x:100, y:300, width: 100, height: 100);let labelPositionX:CGFloat = label.frame.origin.xlet labelPositionY:CGFloat = label.frame.origin.y// ラベルの位置を調べられるprint("labelPositionX=\(labelPositionX)")print("labelPositionY=\(labelPositionY)")
Logを見てみると、
- ラベルの左上originを位置として設定することもできます。
ラベル枠
- layer.borderColor, layer.borderWidth
- この2つを設定して枠線を作成できます。
12345678910111213141516171819let label = UILabel()label.frame = CGRect(x:0, y:0, width: 300, height: 50);// スクリーンサイズを取得let screenWidth:CGFloat = view.frame.size.widthlet screenHeight:CGFloat = view.frame.size.height// ラベルのセンターを位置をスクリーン中央に設定label.center = CGPoint(x: screenWidth/2, y: screenHeight/2)// テキストを中央寄せlabel.textAlignment = NSTextAlignment.center// ラベル枠の枠線太さと色label.layer.borderColor = UIColor.blue.cgColorlabel.layer.borderWidth = 2self.view.addSubview(label)
枠線を角丸にすることもできます。
12345678// ラベル枠の枠線太さと色label.layer.borderColor = UIColor.blue.cgColorlabel.layer.borderWidth = 2// ラベル枠を丸くするlabel.layer.masksToBounds = true// ラベル丸枠の半径label.layer.cornerRadius = 10
- この2つを設定して枠線を作成できます。
関連ページ:
References:
UILabel – UIKit | Apple Developer Documentation
UIFont – UIKit | Apple Developer Documentation
UIColor – UIKit | Apple Developer Documentation
frame – UIView | Apple Developer Documentation