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

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

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

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

Q&A

解決済

1回答

851閲覧

swift Autolayout

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2021/02/22 05:44

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view. 8 9 let view1 = UIView() 10 view1.backgroundColor = .red 11 view1.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width / 2, height:self.view.bounds.height / 2) 12 view1.center = CGPoint(x: self.view.bounds.width / 2, y:self.view.bounds.height / 2) 13 self.view.addSubview(view1) 14 } 15}

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view. 8 9 let view1 = UIView() 10 view1.backgroundColor = .red 11 view1.translatesAutoresizingMaskIntoConstraints = false 12 self.view.addSubview(view1) 13 14 view1.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 1 / 2).isActive = true 15 view1.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 1 / 2).isActive = true 16 view1.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true 17 view1.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true 18 } 19 20 21}

上のコードを下のコードどちらも同じサイズ、位置のviewが作れると思うんですけど、この二つは具体的に何がちがうのでしょうか?下はおそらくAutolayoutだと思うんですけど、上だけのコードではAutolayoutにならないのでしょうか?そしたらなんのために上のコードをつかうのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

上のコードを下のコードどちらも同じサイズ、位置のviewが作れると思うんですけど、この二つは具体的に何がちがうのでしょうか?

上のコードは、端末の具体的なデバイスサイズから View のサイズを具体的に計算しています。
具体的な計算はコーディングの段階である程度済むため、比較的計算量が少ないという利点があります(デザインする人間にとっては大変な場合もあります)。

下のコードは、基準となるビューの高さ、幅、中心座標を基準に相対的に計算しています。
相対的に記述できるため、Interface Builder での AutoLayout に慣れれば全体的な見通しが立ちやすいという利点があります(ただし、これは人によるかとおもいます)。

相対的にかけるので、いわゆる「トルツメ」系のデザインは行いやすいとは思います。

ちなみに、上記のコードだと View が最初に読み込まれた時点(viewDidLoad(_:)が実行された時点)での画面サイズを基準に計算を行うため、端末を回転させた場合には意図しない位置に図形が表示されてしまいます。

一方、AutoLayout であれば逐一計算が行われるため、そのあたりの考慮はあまりしなくてもよくなりますが、絶対ではないため、それなりの配慮は必要となります。

少し古い記事ですが、トルツメ系については下記の記事あたりが概念的には参考になるかと思います。

下はおそらくAutolayoutだと思うんですけど、上だけのコードではAutolayoutにならないのでしょうか?そしたらなんのために上のコードをつかうのでそ

上のコードは「絶対値指定」なので「AutoLayout」ではありません。

では、なぜ「絶対値指定」の記述もあるのかというと、最大の理由が「計算コストが低いから」だと思います。

たとえば、UITableViewCell の中に大量に UI 部品を配置し、複雑な AutoLayout を設定した場合を考えてみます。

UITableView で新しい Cell を表示される、あるいは Cell 内部のコンテンツが更新されるたびに、AutoLayout エンジンが方程式から最適な値を計算し、部品の再配置を行います。

画面に表示されるセルが少ない場合にはあまり問題はありませんが、これが大量のセルを表示するような状況になった場合、計算量も相当なものとなり、時によっては計算が間に合わず部品が正しい位置に表示されなかったり、セルの表示がカクついたりする原因になったりします。

X系だと問題にならない計算が、6 など古い機種になった場合には計算が追いつかなくなる場合もよくあるようです。

ただし、それぞれ一長一短であり、再利用性の問題、計算量の問題、アニメーションの有無なども関わってくると思いますので、適材適所で使うのがいいのではないでしょうか。

投稿2021/02/22 06:28

TsukubaDepot

総合スコア5086

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問