71695


Swiftで、以下の画像のようにbutton1からの相対距離でbutton2を配置したいです。  
sizeやx座標は変更せずに、y座標だけ変更したいと考えています。  
  
constraintなどは使用せずに、コードで「button1から10の距離」や「button1から100の距離」など、可変にできるようにしたいと考えています。

[![画像の説明をここに入力](https://i.stack.imgur.com/1bpEP.jpg)](https://i.stack.imgur.com/1bpEP.jpg)

UIButtonやUILabelにorigin.yやheightなど色々パラメーターがありどこを調整したら良いかわからなかったため  
どのようにコードを書いたら良いかご教授ください。


CC BY-SA 4.0
2020-11-03T10:30:24.143
71693
2020-11-03T14:30:11.050
36446
question
swift
SwiftでUIButtonやUILabelの座標を相対位置で決めるにはどうしたら良いですか？


> UIButtonやUILabelにorigin.yやheightなど色々パラメーターがあり

Swiftの用語とすれば、「パラメーター」でなくて、プロパティになります。そして、`UIButton`、`UILabel`の座標情報は、親クラスの`UIView`のプロパティとして定義されています。

[class UIView](https://developer.apple.com/documentation/uikit/uiview)

`UIView`の座標情報を扱うプロパティは、`frame`、`bounds`そして`center`があります。`frame`と`bounds`の違いについては、ここでは割愛します。今回使うのは、`frame`です。そして、`center`は、`UIView`オブジェクトの中心の位置座標（`CGPoint`）です。

[frame](https://developer.apple.com/documentation/uikit/uiview/1622621-frame)

プロパティ`frame`の型は、`CGRect`で、矩形の座標情報を持ちます。ここで、しっかり`CGRect`のリファレンスまで調べてください。どんどん穴を掘るように下に潜っていくのが、リファレンスを調べる基本です。

[CGRect](https://developer.apple.com/documentation/coregraphics/cgrect)

`CGRect`は、二つのメンバー（プロパティ）、`origin: CGPoint`、`size:
CGSize`から成り立っています。`origin`は位置座標、すなわち（`UIKit`の場合）Viewの左上端の座標を表し、`size`は、大きさ（高さと幅）を表します。

ここまで調べれば、「`UIButton`や`UILabel`」は、`UIView`に置き換えられ、「`origin.y`や`height`など」は、それぞれ`.frame.origin.y`、`.frame.size.height`に置き換えられることがわかると思います。

`UIView`のプロパティ`frame`は、`{get
set}`すなわち値の取得だけでなく、値のセット（変更）もできます。以上の情報を知ることができれば、質問者さんの意図、目的を実現することは、難しくないでしょう。


CC BY-SA 4.0
2020-11-03T11:43:20.427
71695
2020-11-03T14:30:11.050
2020-11-03T14:30:11.050
5519
18540
71693
answer