前提・実現したいこと
ボタンを押して画面遷移 → 遷移先画面の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をオフにしておきたいです。
なにか他に解決する方法をご存知でしたら教えて下さい。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー