質問編集履歴

4 修正

KaneChan

KaneChan score 15

2017/09/06 16:18  投稿

PageMenuのmenu位置が、子要素のViewControllerのsegue遷移によってずれてしまう。
PageMenuというメニューバーを実装できるライブラリを使用しております。[GitHub](https://github.com/PageMenu/PageMenu)
pageMenuが持っている一つのViewControllerでUIButtonを使い、また違うViewControllerへsegue遷移を行い、そのViewControllerをdismissで元のViewControllerへ戻ってきたときに、pageMenuのmenuのy値がずれてしまいます。
具体的にはmenuはステータスバーの高さ(20px)分ずらしているのですが、上記の場合で戻ってきた場合yが0から始まりステータスバーと重なってしまいます。
以下がコードとなります。
```swift
//pageMenuを使用しているviewController
//ちなみにこのviewController自体もtabBarViewControllerの子要素になっています。
import UIKit
import PageMenu
class PageMenuViewController: UIViewController {
   var pageMenu: CAPSPageMenu?
   var viewControllerArray : [UIViewController] = []
   var viewController1 = ViewController1()
   var viewController2 = ViewController2()
   var parameters: [CAPSPageMenuOption] = [
       .menuHeight(44), //ナビゲーションバーと同じ高さ(64px)にしている
       ......
   ]
   override func viewDidLoad() {
       super.viewDidLoad()
       viewController1.title = "ビュー1"
       viewController2.title = "ビュー2"
       viewControllerArray.append(viewController1)
       viewControllerArray.append(viewController2)
       pageMenu = CAPSPageMenu(viewControllers: viewControllerArray, frame: CGRect(x: 0, y:
                  20, width: self.view.frame.width, height: self.view.frame.height), 
                  pageMenuOptions: parameters) //ステータスバーの高さ分(20px)をずらしている
       self.view.addSubview(pageMenu!.view)
   }
}
```
```swift
//pageMenuの子要素のviewController
import UIKit
class ViewController1: UIViewController {
   var button = UIButton()
   override func viewDidLoad() {
       super.viewDidLoad()
       button.frame = ......
       self.view.addSubView(button)
       button.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside)
   }
  func buttonAction(_ sender: UIButton) {
   let nextView = NextViewController()
   self.present(nextView, animated: true, completion: nil)
  //このアクションでNextViewControllerへsegue遷移を行い、dismissで戻った場合PageMenuControllerのmenuの位置がずれてしまう。
   
   }
}
```
ちなみにコード上でpageMenuにconstrainsを追加しても変わりませんでした。
またmenuの高さを64、yを0にしたところ、このズレは起きませんでしたが、その場合menuのタイトルがステータスバーに近くなってしまい、見た目的に悪いので避けたいです。
何か考えられる解決方法はないでしょうか。
長くなりましたがよろしくお願いします。
  • iOS

    6276 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    7086 questions

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

  • Swift

    12339 questions

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

3 修正

KaneChan

KaneChan score 15

2017/09/06 16:17  投稿

PageMenuのmenu位置が、子要素のViewControllerのsegue遷移によってずれてしまう。
PageMenuというメニューバーを実装できるライブラリを使用しております。[GitHub](https://github.com/PageMenu/PageMenu)
pageMenuが持っている一つのViewControllerでUIButtonを使い、また違うViewControllerへsegue遷移を行い、そのViewControllerをdismissで元のViewControllerへ戻ってきたときに、pageMenuのmenuのy値がずれてしまいます。
具体的にはmenuはステータスバーの高さ(20px)分ずらしているのですが、上記の場合で戻ってきた場合yが0から始まりステータスバーと重なってしまいます。
以下がコードとなります。
```swift
//pageMenuを使用しているviewController
//ちなみにこのviewController自体もtabBarViewControllerの子要素になっています。
import UIKit
import PageMenu
class PageMenuViewController: UIViewController {
   var pageMenu: CAPSPageMenu?
   var viewControllerArray : [UIViewController] = []
   var viewController1 = ViewController1()
   var viewController2 = ViewController2()
   var parameters: [CAPSPageMenuOption] = [
       .menuHeight(44), //ナビゲーションバーと同じ高さ(64px)にしている
       ......
   ]
   override func viewDidLoad() {
       super.viewDidLoad()
       viewController1.title = "ビュー1"
       viewController2.title = "ビュー2"
       viewControllerArray.append(viewController1)
       viewControllerArray.append(viewController2)
       pageMenu = CAPSPageMenu(viewControllers: viewControllerArray, frame: CGRect(x: 0, y: 20, width: self.view.frame.width,
                                height: self.view.frame.height), pageMenuOptions: parameters) //ステータスバーの分をずらしている
       pageMenu = CAPSPageMenu(viewControllers: viewControllerArray, frame: CGRect(x: 0, y:
                  20, width: self.view.frame.width, height: self.view.frame.height), 
                  pageMenuOptions: parameters) //ステータスバーの高さ分(20px)をずらしている
       self.view.addSubview(pageMenu!.view)
   }
}
```
```swift
//pageMenuの子要素のviewController
import UIKit
class ViewController1: UIViewController {
   var button = UIButton()
   override func viewDidLoad() {
       super.viewDidLoad()
       button.frame = ......
       self.view.addSubView(button)
       button.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside)
   }
  func buttonAction(_ sender: UIButton) {
   let nextView = NextViewController()
   self.present(nextView, animated: true, completion: nil)
  //このアクションでNextViewControllerへsegue遷移を行い、dismissで戻った場合PageMenuControllerのmenuの位置がずれてしまう。
   
   }
}
```
ちなみにコード上でpageMenuにconstrainsを追加しても変わりませんでした。
またmenuの高さを64、yを0にしたところ、このズレは起きませんでしたが、その場合menuのタイトルがステータスバーに近くなってしまい、見た目的に悪いので避けたいです。
長くなりましたがよろしくお願いします。
  • iOS

    6276 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    7086 questions

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

  • Swift

    12339 questions

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

2 誤字

KaneChan

KaneChan score 15

2017/09/06 16:15  投稿

PageMenuというメニューバーを実装できるライブラリを使用しております。[GitHub](https://github.com/PageMenu/PageMenu)
pageMenuが持っている一つのViewControllerでUIButtonを使い、また違うViewControllerへsegue遷移を行い、そのViewControllerをdismissで元のViewControllerへ戻ってきたときに、pageMenuのmenuのy値がずれてしまいます。
具体的にはmenuはステータスバーの高さ(20px)分ずらしているのですが、上記の場合で戻ってきた場合yが0から始まりステータスバーと重なってしまいます。
以下がコードとなります。
```swift
//pageMenuを使用しているviewController
//ちなみにこのviewController自体もtabBarViewControllerの子要素になっています。
import UIKit
import PageMenu
class PageMenuViewController: UIViewController {
var pageMenu: CAPSPageMenu?
var viewControllerArray : [UIViewController] = []
var viewController1 = ViewController1()
var viewController2 = ViewController2()
var parameters: [CAPSPageMenuOption] = [
.menuHeight(44), //ナビゲーションバーと同じ高さ(64px)にしている
......
]
override func viewDidLoad() {
super.viewDidLoad()
viewController1.title = "ビュー1"
viewController2.title = "ビュー2"
viewControllerArray.append(viewController1)
viewControllerArray.append(viewController2)
pageMenu = CAPSPageMenu(viewControllers: viewControllerArray, frame: CGRect(x: 0, y: 20, width: self.view.frame.width,
height: self.view.frame.height), pageMenuOptions: parameters) //ステータスバーの分をずらしている
self.view.addSubview(pageMenu!.view)
}
}
```
```swift
//pageMenuの子要素のviewController
import UIKit
class ViewController1: UIViewController {
var button = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
button.frame = ......
self.view.addSubView(button)
button.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside)
}
func buttonAction(_ sender: UIButton) {
let nextView = NextViewController()
self.present(nextView, animated: true, completion: nil)
//このアクションでNextViewControllerへsegue遷移を行い、dismissで戻った場合PageMenuControllerのmenuの位置がずれてしまう。
}
}
```
ちなみにコード上でpageMenuにconstrainsを追加しても変わりませんでした。
またmenuの高さを64、yを0にしたところ、このズレは起きませんでしたが、その場合menuのタイトルがステータスバーに近くなってしまい、見た目的に悪いので避けたいです。
長くなりましたがよろしくお願いします。
  • iOS

    6276 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    7086 questions

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

  • Swift

    12339 questions

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

1 誤字

KaneChan

KaneChan score 15

2017/09/06 16:13  投稿

PageMenuのmenu位置がずれてしまう。
PageMenuというメニューバーを実装できるライブラリを使用しております。[GitHub](https://github.com/PageMenu/PageMenu)
pageMenuが持っている一つのViewControllerでUIButtonを使い、また違うViewControllerへsegue遷移を行い、そのViewControllerをdismissで元のViewControllerへ戻ってきたときに、pageMenuのmenuのy値がずれてしまいます。
具体的にはmenuはステータスバーの高さ(20px)分ずらしているのですが、上記の場合で戻ってきた場合yが0から始まりステータスバーと重なってしまいます。
以下がコードとなります。
```swift
//pageMenuを使用しているviewController
//ちなみにこのviewController自体もtabBarViewControllerの子要素になっています。
import UIKit
import PageMenu
class PageMenuViewController: UIViewController {
   var pageMenu: CAPSPageMenu?
   var viewControllerArray : [UIViewController] = []
   var viewController1 = ViewController1()
   var viewController2 = ViewController2()
   var parameters: [CAPSPageMenuOption] = [
       .menuHeight(44), //ナビゲーションバーと同じ高さ(64px)にしている
       ......
   ]
   override func viewDidLoad() {
       super.viewDidLoad()
       viewController1.title = "ビュー1"
       viewController2.title = "ビュー2"
       viewControllerArray.append(viewController1)
       viewControllerArray.append(viewController2)
       pageMenu = CAPSPageMenu(viewControllers: viewControllerArray, frame: CGRect(x: 0, y: 20, width: self.view.frame.width,
                                height: self.view.frame.height), pageMenuOptions: parameters) //ステータスバーの分をずらしている
       self.view.addSubview(pageMenu!.view)
   }
}
```
```swift
//pageMenuの子要素のviewController
import UIKit
class ViewController1: UIViewController {
   var button: UIButton()
   var button = UIButton()
   override func viewDidLoad() {
       super.viewDidLoad()
       button.frame = ......
       self.view.addSubView(button)
       button.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside)
   }
  func buttonAction(_ sender: UIButton) {
   let nextView = NextViewController()
   self.present(nextView, animated: true, completion: nil)
  //このアクションでNextViewControllerへsegue遷移を行い、dismissで戻った場合PageMenuControllerのmenuの位置がずれてしまう。
   
   }
}
```
ちなみにコード上でpageMenuにconstrainsを追加しても変わりませんでした。
またmenuの高さを64、yを0にしたところ、このズレは起きませんでしたが、その場合menuのタイトルがステータスバーに近くなってしまい、見た目的に悪いので避けたいです。
長くなりましたがよろしくお願いします。
  • iOS

    6276 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    7086 questions

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

  • Swift

    12339 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る