質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

5196閲覧

labelのtextが表示される時とされない時の違いを知りたい

Naoki_Pro

総合スコア23

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/02/07 16:01

前提・実現したいこと

storyboardなしのコードのみで開発をしています。
また、UITabBarControllerを使ってtabBarItemを2つ作り、FirstViewControllerとSecondViewControllerに紐付けています。

FirstViewControllerとSecondViewController内の
にlabel.text__(以下のソースコードに記載してあります)__の文字列を画面に表示させたいのですが、label.frameを指定すると文字列は表示され、指定しないと文字列は表示されなくってしまいます。

これは何が原因なのでしょうか?
初心者なのでくだらない質問しれませんが、ご回答のほどよろしくお願いします。

シュミレータ画面

label.frameを指定した時
シュミレータ画面

label.frameを指定しなかった時
イメージ説明

該当のソースコード

CustomTabBarController.swift

import UIKit class CustomTabBarController: UITabBarController { let firstVC = FirstViewController() let secondVC = SecondViewController() override func viewDidLoad() { super.viewDidLoad() firstVC.tabBarItem = UITabBarItem(title: "first", image: nil, tag: 0) secondVC.tabBarItem = UITabBarItem(title: "second", image: nil, tag: 1) self.setViewControllers([firstVC, secondVC], animated: true) } }

FirstViewController.swift

import UIKit class FirstViewController: UIViewController { var label: UILabel = UILabel() override func viewDidLoad() { super.viewDidLoad() print("Fisrt View Controller") view.backgroundColor = .blue // label.frameを記述するとlagel.textが現れるが、記述しないとlabel.textが消えてしまう label.frame = view.frame label.text = "Fisrt View Controller!" label.textAlignment = .center view.addSubview(label) } }

SecondViewController.swift

import UIKit class SecondViewController: UIViewController { var label: UILabel = UILabel() override func viewDidLoad() { super.viewDidLoad() print("Second View Controller") view.backgroundColor = .orange // label.frameを記述するとlagel.textが現れるが、記述しないとlabel.textが消えてしまう label.frame = view.frame label.text = "Second View Controller!" label.textAlignment = .center view.addSubview(label) } }

ソースコードの補足

AppDelegate.swiftとSceneDelegate.swift内のwindowプロパティは下記のようにしてあります。

window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = CustomTabBarController() window?.makeKeyAndVisible()

補足情報(ツールのバージョン)

xcode 11.3.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

UILabel を生成するときに frame を指定してないので、frame が (0, 0, 0, 0) になり、幅も高さも0なので、そのままでは何も表示されません。
お気づきのように label.frame = view.frame などとして frame を明示的に指定するか、AutoLayout で自動的にサイズが設定されるようにする必要があります。

投稿2020/02/07 23:50

hoshi-takanori

総合スコア7895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Naoki_Pro

2020/02/08 01:29

ご回答ありがとうございます! そうだったんですね。 今まで、storyboard上にlabelを配置していた時は、frameを書かなくても何も問題なかったのですが、それはstoryboard上で勝手にframeを指定してくれていたからということなのでしょうか??
hoshi-takanori

2020/02/08 01:34

幅も高さも0になるのはframeを指定せずにコードで生成した場合で、storyboard上に配置した場合はもちろん見た目通りのframeが設定されます。(autolayoutを有効にしている場合はその設定も必要になりますが。)
Naoki_Pro

2020/02/08 13:07

丁寧に答えていただきありがとうござますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問