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

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

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

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

Swift

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

Q&A

解決済

1回答

1682閲覧

警告(黄色)を解決したい。セグメンテッドコントロールについて

wesker.alice

総合スコア45

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/05/28 10:28

編集2020/05/29 06:34

前提・実現したいこと

前提
書籍「詳細!Swift iPhoneアプリ開発入門ノート: iOS 12+Xcode 10対応」を読みながら学んでいる初学者です。
P323の写真のサイズを変更する旨でセグメンテッドコントロールを使用して画像の大きさを変更する。を学んでいます。
書籍の通りに拡大縮小ができたのですが、警告が出たままなので気持ち悪いです。

実現したいこと
書籍の通りに記述したところ、黄色の警告が出るようになり、解決方法を調べました。
Resolve Auto Layout Lssues(三角マーク)から「Add Missing Constraints」を選ぶと解決するという記事を読み、実行してみたところ、余計に警告が増えてしまいました。
違う記事だと制約が無駄に増えてしまうので「Add Missing Constraints」は選ばない方が良いと書かれていました。
座標設定がうまくいっていない的な事が書かれていましたが、よく分からずで止まってしまいました。
黄色の警告なので無視してもシミュレータは実行できるのですが、できれば警告を解決したいです。

発生している問題・エラーメッセージ

swift

1views without any layout constraints may clip their content or overlap other views.

該当のソースコード

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 //写真をOutlet接続しておく 6 @IBOutlet weak var myPhoto: UIImageView! 7 //変数の準備 8 let photoSize = CGSize(width: 320, height: 240) 9 let photoOrigin = CGPoint(x: 27, y: 100) 10 let smallFrame = CGRect(x: 27, y: 100, width: 160, height: 120) 11 var bigFrame:CGRect? 12 13 //セグメンテッドコントロールとAction接続する 14 @IBAction func changedFrame(_ sender: UISegmentedControl) { 15 let index = sender.selectedSegmentIndex 16 switch index { 17 case 0://小さく表示 18 myPhoto.frame = smallFrame 19 case 1: //大きく表示 20 myPhoto.frame = bigFrame! 21 default: 22 myPhoto.frame = bigFrame! 23 } 24 } 25 26 override func viewDidLoad() { 27 super.viewDidLoad() 28 //表示モードの表示 29 myPhoto.contentMode = .scaleAspectFill 30 //写真フレームをsmallFrameで表示する 31 myPhoto.frame = smallFrame 32 //ビューのサイズに合わせたbigFrameを計算する 33 let photoWidth = view.frame.width - 27 * 2 34 let photoHeight = 240 / 320 * photoWidth 35 let photoSize = CGSize(width: photoWidth, height: photoHeight) 36 bigFrame = CGRect(origin: photoOrigin, size: photoSize) 37 } 38}

storyboardのスクリーンショットです
イメージ説明

試したこと

同じ警告文で質問されている方がいたので
ベストアンサーに
「制約(constraint)がついていないビューがあるのが原因なので、制約をつけるのはどうでしょうか。
とりあえずやるなら、ストーリーボードを表示させて該当のビューコントローラを選んでから、メニューから、[Editor]->[Resolve Auto Layout Issue]->[Add Missing Constraints]としたらよいと思います。」
と書かれていたので、試してみたところ、警告は解決しませんでした。

何卒よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

マシンの環境
macOS Catalina Version 10.15.3
Xcode Version 11.4
Swift version 5.1.3

書籍のバージョン
Xcode Version 10
Swift version 4.2

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

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

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

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

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

hoshi-takanori

2020/05/29 06:26

正しい制約の付け方を知りたいという質問なら、現在の制約の状況を見せていただく必要があります。Swift のソースコードでは制約をいじってないようなので、Xcode の Storyboard のスクリーンショット貼っていただくのが良いかと。
wesker.alice

2020/05/29 06:35

storyboardのスクリーンショットを貼らせていただきました。
hoshi-takanori

2020/05/29 06:40

ありがとうございます。制約がおかしな状況になってるのかと勘違いしてましたが、単に何も制約をつけてないってことですね。とりあえずそれでも動くとは思いますが、画面サイズが変わると画面からはみ出したりするので、いずれ必要になったら制約の付け方をじっくり学べばよいのではないでしょうか。
wesker.alice

2020/05/29 09:53

なるほどですね。 確かに動くことは動きますが、画面サイズが異なるとはみ出たりします。 今は動かし方や、swiftでできることを学んでいるので、警告の場合でもひとまずは、そのまま無視をしても問題ないようですね。 これからはスクリーンショットも合わせて質問するように心がけます。 ご回答ありがとうございます。
hoshi-takanori

2020/05/29 10:01

スクリーンショットは画面の表示がおかしいなどの必要な場合だけで充分です。今回は制約の状況を確認したかったので。
wesker.alice

2020/05/31 08:53

わかりました。 ありがとうございます。 助かりました。
guest

回答1

0

自己解決

画面サイズが異なるとはみ出たりするので、その点で警告が出ていたようです。
今学んでいるのはきちんと記述どおりに動くかどうかなので、サイズが異なればはみ出るから制約をつけてねという警告らしいということがわかりました。
制約をつけていけば警告も解除されるとのことなので、ゆくゆく必要になった時に制約をつけてそれでも解決できない場合は改めて質問させていただきます。

ひとまずは自己解決とさせていただきます。

投稿2020/05/29 09:57

wesker.alice

総合スコア45

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問