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

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

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

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

1517閲覧

UISegmentedControlをMainStoryBoardで設定(Constraintsで固定)した後、コードから位置を変更したいができない。

pythonlove

総合スコア13

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/11/14 15:31

編集2020/11/15 16:29

やりたいこと

MainStoryBoardで設定(Constraintsで固定)したUISegmentedControlの位置をViewControllerから変更したい。(iPhoneとiPadで表示位置を変えたいため)

コード

環境
Swift5
Xcode12

swift

1import UIKit 2 3class ViewController: UIViewController { 4 @IBOutlet var segment : UISegmentedControl! 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view. 8 let flag : Bool = true 9 10 if(flag){ 11 self.segment.frame.origin.y += 100 12 self.view.setNeedsLayout() 13 } 14 } 15 16 17} 18

スクリーンショット

↓Constraintsの位置から変更されていない。
イメージ説明

MainStoryBoard

イメージ説明

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

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

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

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

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

TsukubaDepot

2020/11/14 21:56

部品に対して設定した制約の内容を教えていただけないでしょうか。
pythonlove

2020/11/15 16:31

情報不足失礼しました。 segment.top = Safe Area.top + 35です。
guest

回答1

0

ベストアンサー

AutoLayoutで設定すると、originframe などの値を直接操作しても変更することは基本的にできないと思われます。

なので、origin ではなく制約(Constraint)そのものを変更するようにしたほうが、ご期待の動作になるのではないでしょうか。

ちょっと古い記事ですが、現時点で下記の操作に違いはないため、制約に関する IBoutlet を設定し、constant プロパティを直接変更するようにすれば操作可能だと思います。

ただ、本来であればサイズクラスに合わせて AutoLayout を設定するのが望ましい設定だと思います。

上記の公式リファレンスの中にSize Classesという項目がありますが、デバイスごとに基本的なサイズクラスというものが設定されています。

AutoLayout はなにもしなければ全ての画面サイズで適用できるよう、レイアウトエンジンが計算を行いますが、サイズクラスによってその挙動を変えたいのであれば、そのような設定をする必要があります。

参考記事としてはこの辺りになるかと思います。

  • [iOS Size Classesを利用してユニバーサル対応を行った話

](https://engineer.recruit-lifestyle.co.jp/techblog/2017-01-23-ios-universal/)

投稿2020/11/15 23:41

TsukubaDepot

総合スコア5086

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

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

pythonlove

2020/11/16 04:03

Size Classesという設定があるのですね。 ご提示いただいた記事を基に作ってみたいと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問