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

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

新規登録して質問してみよう
ただいま回答率
85.48%
タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

メニュー

メニューは、UIにおける仕組みであり、ユーザに機能の表示と実行する手段を与えます。

Xcode

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

Swift

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

Q&A

解決済

1回答

2022閲覧

Swift3のPageMenuでタブ

退会済みユーザー

退会済みユーザー

総合スコア0

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

メニュー

メニューは、UIにおける仕組みであり、ユーザに機能の表示と実行する手段を与えます。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2016/11/23 09:59

###前提・実現したいこと
タブメニューの幅を変動にし、タブメニュー自体を横スクロールできるように実装したい

###発生している問題・エラーメッセージ
https://teratail.com/questions/55957?whotofollow=
こちらで質問をさせていただき、PageMenu を使用してタブメニューの導入に成功しましたが、
タブを増やしていくとタブメニューの幅が固定されており、タブの文字が省略されていく・・という状況です。
swiftでの開発は初めてのため、色々調べてみているのですが全くわからないです。
理想はSmartNewsのようなタブメニューなのですが、
それを実現するためにPageMenuより良いライブラリがあれば教えて頂きたいです。
よろしくお願い致します

###現在実装済みのソースコード
Swift3
ViewController.swiftのみです。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// Viewを格納する配列
var controllerArray : [UIViewController] = []

// 追加するViewを作成 let controller1 : UIViewController = UIViewController() controller1.title = "ビューその1" controller1.view.backgroundColor = UIColor.blue controllerArray.append(controller1) let controller2 : UITableViewController = UITableViewController() controller2.title = "ビューその2" controller2.view.backgroundColor = UIColor.red controllerArray.append(controller2) let controller3 : UITableViewController = UITableViewController() controller3.title = "ビューその3" controller3.view.backgroundColor = UIColor.green controllerArray.append(controller3) let controller4 : UITableViewController = UITableViewController() controller4.title = "ビューその4" controller4.view.backgroundColor = UIColor.yellow controllerArray.append(controller4) let controller5 : UITableViewController = UITableViewController() controller5.title = "ビューその5" controller5.view.backgroundColor = UIColor.yellow controllerArray.append(controller5) // PageMenuの設定 let parameters: [CAPSPageMenuOption] = [ .menuItemSeparatorWidth(4.3), .useMenuLikeSegmentedControl(true), .menuItemSeparatorPercentageHeight(0.1) ] // PageMenuのビューのサイズを設定 pageMenu = CAPSPageMenu(viewControllers: controllerArray, frame: CGRect(x:0.0, y:20.0, width:self.view.frame.width, height:self.view.frame.height), pageMenuOptions: parameters) // PageMenuのビューを親のビューに追加 self.view.addSubview(pageMenu!.view) // PageMenuのビューをToolbarの後ろへ移動 self.view.sendSubview(toBack: pageMenu!.view) }

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

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

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

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

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

guest

回答1

0

ベストアンサー

.useMenuLikeSegmentedControl(true)だとセグメンタルコントロールのような挙動になるんですよ。つまり横幅が固定になります。falseにするか、オプション配列に加えなければメニュー幅は可変になります。

swift

1// PageMenuの設定 2let parameters: [CAPSPageMenuOption] = [ 3.menuItemSeparatorWidth(4.3), 4.useMenuLikeSegmentedControl(false), // または削除 5.menuItemSeparatorPercentageHeight(0.1) 6] 7

CAPSPageMenuOptionを調べると(コマンド+クリックで確認)、用意されているオプションがわかります。ちなみに私は.titleTextSizeBasedOnMenuItemWidth(true)を追加してタブの幅をメニュー名の長さで可変になるようにしています。

swift

1public enum CAPSPageMenuOption { 2 case selectionIndicatorBottomOffset(CGFloat) 3 case selectionIndicatorHeight(CGFloat) 4 case menuItemSeparatorWidth(CGFloat) 5 case scrollMenuBackgroundColor(UIColor) 6 case viewBackgroundColor(UIColor) 7 case bottomMenuHairlineColor(UIColor) 8 case selectionIndicatorColor(UIColor) 9 case menuItemSeparatorColor(UIColor) 10 case menuMargin(CGFloat) 11 case menuItemMargin(CGFloat) 12 case menuHeight(CGFloat) 13 case selectedMenuItemLabelColor(UIColor) 14 case unselectedMenuItemLabelColor(UIColor) 15 case useMenuLikeSegmentedControl(Bool) 16 case menuItemSeparatorRoundEdges(Bool) 17 case menuItemFont(UIFont) 18 case menuItemSeparatorPercentageHeight(CGFloat) 19 case menuItemWidth(CGFloat) 20 case enableHorizontalBounce(Bool) 21 case addBottomMenuHairline(Bool) 22 case menuItemWidthBasedOnTitleTextWidth(Bool) 23 case titleTextSizeBasedOnMenuItemWidth(Bool) 24 case scrollAnimationDurationOnMenuItemTap(Int) 25 case centerMenuItems(Bool) 26 case hideTopMenuBar(Bool) 27 case menuShadowRadius(CGFloat) 28 case menuShadowOpacity(Float) 29 case menuShadowColor(UIColor) 30 case menuShadowOffset(CGFloat) 31 case addBottomMenuShadow(Bool) 32 case iconIndicator(Bool) 33 case iconIndicatorView(UIView) 34 case showStepperView(Bool) 35}

諦めるの早すぎですw

投稿2016/11/23 10:59

fromageblanc

総合スコア2724

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

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

退会済みユーザー

退会済みユーザー

2016/11/23 11:46

そんな簡単にできるんですね・・・ html,css, js ,javaしかやったことがなかったのでもっと色々やる必要があるのかと、 丁寧に解説も入れてくださりありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問