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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

Q&A

解決済

2回答

1398閲覧

Xcodeで、文字サイズ/位置を相対的に変化させたい

ois

総合スコア50

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/08/16 05:09

編集2018/08/16 07:08

はじめてアプリ開発をしています。
iPad、iPhoneなど、どの端末から見ても崩れないアプリを作りたいです。
画面としては入力フォームのようなものを作っています。

困っていることは、
1)例えばTextfieldを上記のように、いろんなサイズの端末に対応させる際に設定する項目がわからない
2)Scroll Viewなど、いつどのViewを入れ子にするかわからない(1を解決しようとしたら、Stack Viewを使うといいとか、Scroll Viewと使うといいとかでてきたので)

という2点です。

特に1に関して困っていて、調べていくうちにAutolayoutを使うということはわかりました。
Equal Width+Multiplierで相対的な横幅にしたものの、サイズが小さいと画面が切れてしまいます。
また、位置もAlignment ConstraintsでHolizontally in Containerを設定しておりますが、ずれてしまいます。
文字サイズは固定になります。
例えば画面にtextfieldを1つ表示するとして、どの端末でもレイアウトを保つにはどういう設定をしたらいいのでしょうか。上記だと不足がありますか。

ご教授いただけると幸いです。

(追記)
現状のViewと制約についてです。
現状のViewの構成は
Scroll View
>Label1
>StackView
>TextField1
>TextField2
という形になっており、ついている制約は
Scroll View : Align Center X to superview, Align Center Y to superview, Proportional Width to Label1
Label1 : Proportial width to Superview
StackView : Align Center X to Superview

具体的な困りごとは
・TextFieldが中央に来ず、左によってしまう
・サイズを小さくした時に文字が表示しきれないのか、部品がつぶれてしまう
というところです。

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

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

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

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

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

fuzzball

2018/08/16 05:10

現状の制約を書いて下さい。
fuzzball

2018/08/16 07:14

制約のエラー出てますよね?まずはエラーは無くして下さい。また、おそらく「Viewの構成」が正しく表現されていません。見る人が分かるように書いて下さい。
guest

回答2

0

ベストアンサー

テキストフィールドの開始位置をどのデバイスでも共通としたいという内容であれば、以下の画像のような制約を入ればできませんか?
※画像の設定だと、端末の横幅に応じてテキストフィールドの横幅は動的に変わります。(左側と右側に10pxの余白が空いたレイアウト)
イメージ説明

テキストフィールドの横幅を端末の横幅の○%とかにしたいなら以下の画像のような制約になるかなと。
イメージ説明

投稿2018/08/29 10:22

Tomochika_Tomo

総合スコア166

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

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

0

下記のソースみたいに、デバイスサイズを得て、TextFieldの幅・高さ、開始位置を調整すれば、どの端末でも同じような位置に配置する事ができます。
また、フォントサイズについても同様にしてデバイスの幅で計算すれば、デバイスのサイズ別に設定できます。
下記ソースは、iPhone SEを基準に位置やサイズを算出しています。

swift4

1import UIKit 2 3class ViewController: UIViewController, UITextFieldDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 9 // デバイスのサイズを得る 10 let devMaxWidth : CGFloat = self.view.bounds.width 11 let devMaxHeight: CGFloat = self.view.bounds.height 12 // UITextFieldの開始位置と幅・高さを設定する 13 let textFieldWidth : CGFloat = devMaxWidth / 320 * 200 14 let textFieldHeight : CGFloat = devMaxHeight / 568 * 80 15 let textFieldPosX : CGFloat = (devMaxWidth - textFieldWidth) / 2 16 let textFieldPosY : CGFloat = (devMaxHeight - textFieldHeight) / 4 17 18 // UITextFieldを作成する 19 let myTextField = UITextField() 20 // UITextFieldの位置とサイズを設定する 21 myTextField.frame = CGRect(x: textFieldPosX, y: textFieldPosY, width: textFieldWidth, height: textFieldHeight) 22 // 表示する文字を代入する 23 myTextField.text = "Hello UITextField!" 24 // テキストを左揃えにする 25 myTextField.textAlignment = NSTextAlignment.left 26 // フォントサイズを設定する 27 myTextField.font = UIFont.systemFont(ofSize: UIFont.systemFontSize * devMaxWidth / 320) 28 // Delegateを自身に設定する 29 myTextField.delegate = self 30 // 枠を表示する 31 myTextField.borderStyle = .roundedRect 32 // バックグラウンドをシアンにする 33 myTextField.backgroundColor = UIColor.cyan 34 // クリアボタンを追加する 35 myTextField.clearButtonMode = .whileEditing 36 // Viewに追加する 37 self.view.addSubview(myTextField) 38 39 } 40 41 // UITextFieldが編集された直前に呼ばれる 42 func textFieldDidBeginEditing(_ textField: UITextField) { 43 print("textFieldDidBeginEditing: (textField.text!)") 44 } 45 46 // UITextFieldが編集された直後に呼ばれる 47 func textFieldDidEndEditing(_ textField: UITextField) { 48 print("textFieldDidEndEditing: (textField.text!)") 49 } 50 51 // 改行ボタンが押された際に呼ばれる 52 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 53 print("textFieldShouldReturn (textField.text!)") 54 // 改行ボタンが押されたらKeyboardを閉じる処理. 55 textField.resignFirstResponder() 56 return true 57 } 58 59 override func didReceiveMemoryWarning() { 60 super.didReceiveMemoryWarning() 61 // Dispose of any resources that can be recreated. 62 } 63} 64

投稿2018/08/16 07:49

t.harima

総合スコア55

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問