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

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

新規登録して質問してみよう
ただいま回答率
85.51%
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

解決済

1回答

441閲覧

segment view レイアウト

Larry

総合スコア28

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クリップ

投稿2019/05/13 15:07

編集2019/05/14 12:45

前提・実現したいこと

ボタンを押して画面遷移 → 遷移先画面のsegmentでviewの切り替え

segmentに設定したviewを正しく表示させたい

発生している問題

・segmentに設定したviewの下が切れる

以下にシミュレータ画面の画像、storyboardとsegmentを切り替えるコードを載せています。
ここでは例文1を押下したときの画面遷移時に表示されるsegmentをfirstに設定しています。

view内の"Label"は表示領域の確認のために置いています。

storyboard上ではfirstViewは"Label"の領域まで背景の色が広がっていますが、シミュレートするとなぜか背景の下半分が切れてしまいます。

イメージ説明イメージ説明イメージ説明イメージ説明イメージ説明
該当のソースコード

import UIKit var segState = 0 class ChatLikeView: UIViewController { @IBOutlet var segment: UISegmentedControl! @IBOutlet var firstView: UIView! @IBOutlet var secondView: UIView! @IBOutlet var thirdView: UIView! override func viewDidLoad() { super.viewDidLoad() switch segState { case 0: self.segment.selectedSegmentIndex = 0 addFirstView() case 1: self.segment.selectedSegmentIndex = 1 addSecondView() case 2: self.segment.selectedSegmentIndex = 2 addThirdView() default: addFirstView() } } func addFirstView() { secondView.removeFromSuperview() thirdView.removeFromSuperview() //firstView.center = view.center self.view.addSubview(firstView) } func addSecondView() { firstView.removeFromSuperview() thirdView.removeFromSuperview() //secondView.center = view.center self.view.addSubview(secondView) } func addThirdView() { firstView.removeFromSuperview() secondView.removeFromSuperview() //thirdView.center = view.center self.view.addSubview(thirdView) } @IBAction func tapSegment(_ sender: UISegmentedControl) { switch (sender as AnyObject).selectedSegmentIndex { case 0: addFirstView() case 1: addSecondView() case 2: addThirdView() default: addFirstView() } } }

試したこと

画面遷移時に表示されるviewのみがこのような現象がおきるようで、
例えば、segState(遷移時に表示されるsegmentのviewを指定する変数)
を segState = 1とすると、seconodのviewにこの現象が起きます。

どうやら

switch segState { case 0: self.segment.selectedSegmentIndex = 0 addFirstView() case 1: self.segment.selectedSegmentIndex = 1 addSecondView() case 2: self.segment.selectedSegmentIndex = 2 addThirdView() default: addFirstView() }

の部分が悪さをしているようで、ここの部分のコードを丸々消去するとこの現象はなくなりましたが、
ここの部分のコードはのちに必要なので削除したくありません。

一つの解決策としてnavigationController!.navigationBar.isTranslucentをtrueにすると、この現象は無くなりますが、遷移時に画面がちらつくためにこちらのサイトを参考にして、Translucentをオフにしておきたいです。

なにか他に解決する方法をご存知でしたら教えて下さい。よろしくお願いします。

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

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

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

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

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

fuzzball

2019/05/14 00:36

これは前の質問と何が違うのでしょうか?
Larry

2019/05/14 00:51

前回のはviewの位置がずれる問題で、今回はviewの一部が切れてしまっている問題です
fuzzball

2019/05/14 01:02

viewの位置やサイズはどこでどうやって設定しているのでしょうか?
Larry

2019/05/14 01:13

すいません。説明の写真が不足していました。夜にまた訂正します。
Larry

2019/05/14 12:56

storyoardの写真を追加しました。 viewの位置やサイズの設定は行っていません。 正確にはコードで位置とサイズをCGRectで行っていましたが、先にこちらの問題を解決したいと思ったので、、、、一旦省いています。 追加したstoryboardの写真とシミュレートしたときの表示が異なる(下が見切れる?)のが今回の問題です。
fuzzball

2019/05/15 00:13

・前回の質問は位置がおかしい ・今回の質問はサイズがおかしい とのことですが、前回の質問で私は「サイズや位置に関する設定をコード側で行わないといけません」と回答しました。ようするに、(現時点では)二つの質問は同じ原因だと考えます。
Larry

2019/06/01 06:49

回答ありがとうございます。あまり理解できていませんが、コード側でサイズを設定すると正しくviewの設定ができましたが、segmentをタップするとviewが下にずれてしまうようになりました。(ナビゲーションバーの高さ分、下にずれる) ですが、storyboard側でviewサイズを大きめに設定して、コード側を削除すると先ほどの現象はなくなりました。少し無理やりですが。。。。 根本的な解決になっていないので、もう少し自分で検討し直してみます。ありがとうございました。
guest

回答1

0

自己解決

少し強引ですが、storyboard側でviewサイズを大きめに設定すると正しく表示はされました。

投稿2019/06/01 06:50

Larry

総合スコア28

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問