🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

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

Q&A

解決済

1回答

721閲覧

swift sizToFitメソッドとは

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2021/02/11 13:56

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 var colorView = UIView() 6 var colorArray:[UIColor] = [.red,.orange,.yellow,.green,.cyan,.blue,.purple,.magenta] 7 var colorIndex = 0 8 var textView = UITextView() 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 // Do any additional setup after loading the view. 13 14 colorView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width / 4, height: self.view.bounds.width / 4) 15 colorView.center = CGPoint(x: self.view.bounds.width / 2, y: self.view.bounds.width / 2) 16 colorView.backgroundColor = colorArray[colorIndex] 17 self.view.addSubview(colorView) 18 19 textView.text = "0" 20 textView.textColor = .black 21 textView.backgroundColor = .lightGray 22 textView.textAlignment = .center 23 textView.sizeToFit() 24 textView.frame = CGRect(x: 0, y: 0, width: self.colorView.bounds.width, height:self.textView.bounds.height) 25 textView.center = self.colorView.center 26 self.view.addSubview(textView) 27 } 28}

この textViewの高さはtextView.frame = CGRect(x: 0, y: 0, width: self.colorView.bounds.width, height:self.textView.bounds.height)ここで指定していると思うんですけど、self.textView.bounds.heighはテキストビューの高さと指定しているだけだと思うんですけど、これは具体的にどのくらいの高さなんでしょうか?そしてtextView.sizeToFit()のsizeToFit()はどのような効果があるのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

self.textView.bounds.heighはテキストビューの高さと指定しているだけだと思うんですけど、これは具体的にどのくらいの高さなんでしょうか?

提示されているコードを実行した場合は、高さ「30」になるようです。(高さをログ出しして確認)
ただし、こちらはテキストの内容によってサイズが変わってきます。フォントサイズや行数を変更した場合に高さも変わってくるかと思います。


そしてtextView.sizeToFit()のsizeToFit()はどのような効果があるのでしょうか?

テキストの内容によって、TextViewのサイズを自動調整してくれる効果があります。
以下の行をコメントアウトするとサイズ調整が行われないため、テキストが表示されなくなるかと思います。
(サイズ調整が行われず、TextView自体の高さが「0」になってしまう)

Swift

1textView.sizeToFit()

・参考URL
Apple Document / sizeToFit
sizeToFitについて

投稿2021/02/11 15:29

編集2021/02/11 15:29
tsuki01

総合スコア1751

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

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

退会済みユーザー

退会済みユーザー

2021/02/14 13:36

なぜこれは今高さ30なのでしょうか?
tsuki01

2021/02/15 09:13 編集

デフォルトのサイズが反映されるからです。 現在はTextViewのサイズも、フォントスタイル等も特に指定していないので「高さ30」となっています。 ※以下、サイズ確定までの流れです。余計分かりづらくなる様だったらスルーしてください。 TextViewに対して「sizeToFit」を行う ↓ テキスト"0" に合わせて、TextViewのサイズが変更される (TextViewのサイズが自動調整される) ↓ TextViewの高さが30になる (現在のフォントサイズやフォントスタイル、文字数が影響して高さ30になる)
退会済みユーザー

退会済みユーザー

2021/02/16 07:49

丁寧にありがとうございます。textView.sizeToFit()を指定した後にheight:self.textView.bounds.heightこのように高さを指定する意味はあるのでしょうか?self.textView.bounds.heightこれは今サイズやフォントなど何も指定していないから30を高さとして指定しているのでしょうか?
tsuki01

2021/02/16 10:34 編集

※高さ30に関しては一旦忘れてください。 回答欄に記載した通り、フォントサイズなどの影響でTextViewの高さや横幅は変わります。 また、「self.textView.bounds.height」の意味は理解している認識で大丈夫でしょうか? 「self.textView.bounds.height」は、View自身の高さを取得するものです。 sizeToFitを行った後に「self.textView.bounds.height」とすることで、サイズ調整後の高さを初めて取得できるんです。 sizeToFitを行ってTextViewのサイズ調整した後、「self.textView.bounds.height」をframeの高さに設定することで、最適な高さを反映することができます。 ※なので、設定する意味はあります。 仮に以下の処理を固定値に変更した場合、どうなるかわかりますでしょうか? せっかくsizeToFitでTextViewのサイズを調整したのに、「self.textView.bounds.height」ではなく固定値を利用したら、サイズ調整した意味がなくなりますよね?サイズが小さすぎてテキストが収まらなかったり、サイズが大きすぎて余白が無駄にできたり。 変更前:textView.frame = CGRect(x: 0, y: 0, width: self.colorView.bounds.width, height:self.textView.bounds.height) ↓ 変更後:textView.frame = CGRect(x: 0, y: 0, width: 10, height:10)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問