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

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

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

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

Q&A

解決済

1回答

309閲覧

動的に配置したボタンのオートレイアウトについてです。

Hayato1201

総合スコア220

Swift

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

0グッド

0クリップ

投稿2018/09/12 06:59

編集2018/09/12 07:51

以下の様にメソッドが実行されるとボタンがScrollViewに表示される様なプログラムを作ったのですが、とりあえずiPhone8の画面の大きさを想定して作っていたため、他のデバイスだとややズレが生じます。その様な場合どうすれば良いでしょうか?

Swift

1Button_num += 1 2 if Button_num % 2 == 0{ 3 4 Button_num_row += 1 5 6 }else{ 7 Button_num_row = 0 8 Button_num_col += 1 9 } 10btn.frame = CGRect(x:CGFloat(55+Button_num_row*150), y:CGFloat((Button_num_col*100)-70),width:100, height:50) 11 12 13/*******省略************/ 14 15scrview.addSubview(btn)

これで画面に二列でボタンを配置していっています。

これをオートレイアウトしてどのデバイスでもズレがない様にしたいです。その場合どの様に書けば良いでしょうか?

TinyConstraintsというライブラリで簡単にオートレイアウトが出来るよですが、この様な場合もこれを使ってできたりするのでしょうか?因みにScrollViewに関しては以下の様にTinyConstraintsを使って画面に合わせたレイアウトをする事ができました。

Swift

1scrview.edgesToSuperview(insets: TinyEdgeInsets(top: 70, left: 0, bottom: 0, right: 0))

それ以外の方法で、普通にかける場合はそれでもいいのですが、画面に合わせてボタンの配置を行いたいです。

・・・・追記・・・・・・・・・・・・・
因みに以下の様な形で試して見ました。

Swift

1scrview.addSubview(btn) 2 3 if Button_num % 2 == 0{ 4 5 Button_num_row += 1 6 7 }else{ 8 Button_num_row = 0 9 Button_num_col += 1 10 } 11 12 if Button_num % 2 != 0{ 13 14 btn.edges(to: scrview, insets: TinyEdgeInsets(top: CGFloat((Button_num_col*100)-70), left: 50, bottom:CGFloat((Button_num_col*100)-20) , right:200 )) 15 16 17 }else{ 18 btn.edges(to: scrview, insets: TinyEdgeInsets(top: CGFloat((Button_num_col*100)-70), left: 200, bottom:CGFloat((Button_num_col*100)-20) , right:10)) 19 }

しかしこれで2個ボタンを配置した際に1つだけボタンを配置した際には置きたい位置に置けているのに、2つ目を置いた際に1つ目のボタンが右に伸びてしまいます。

イメージとしてはbtnの位置がその親であるscrviewに対してTinyEdgeInsetsで指定した幅それぞれがマージンをとる様なものだと思ったのですが、何故subviewであるお互いが干渉するのでしょうか?

また、このtopやleftというのは、topならボタンの上のエッジが親のview(今回ならscrview)の上のエッジに対してどれくらいにくるか、leftならボタンの左のエッジが親のviewの左のエッジに対してどのいちにくるかという様なことではないのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードによるAutoLayoutは、コード autolayoutでググれば見つかります。(そのままなんですけど、なぜググらないんでしょうか?)

TinyConstraintsは、それを簡単に扱えるようにするライブラリのようですので、同じように使えると思います。

投稿2018/09/12 07:14

fuzzball

総合スコア16731

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

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

Hayato1201

2018/09/12 07:52

回答ありがとうございました。 追記に記載しましたが、以上の様に調べて試して見てうまくいかなかったため質問しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問