お世話になってます。
XLPagerTabStripを使用してタブバーの実装を行っているんですが、
初期位置がx:0,y:0なのでヘッダーとかぶってしまうのでy座標を任意で設定したいです。
ストーリーボード は使用せずにコードのみで実装したいのですが、参考文献が見当たらず質問させていただきました。
setting.styleでも設定できないのでご存知の方いたらご教授いただけると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
たまたま先日回答向けに書き溜めたのがあるので、そのまま貼っておきます。
ButtonBarPagerTabStripViewController
に buttonBarView
、containerView
をいうプロパティがあるので、それをそのまま利用します(下記のコードだと違うプロパティ名にしたいので冗長に書いていますが、直接指定しても結果に変わりはないはずです)。
ただ、公式は「StoryBoard の使用」を強く推奨していますので、このような利用は想定外であることはご理解ください。
Swift
1import UIKit 2import XLPagerTabStrip 3 4class ViewController: ButtonBarPagerTabStripViewController, UICollectionViewDelegateFlowLayout { 5 lazy var collectionView: ButtonBarView = { 6 let cv = buttonBarView 7 return cv! 8 }() 9 10 lazy var scrollView: UIScrollView = { 11 let sv = containerView 12 return sv! 13 }() 14 15 16 override func viewDidLoad() { 17 // MARK: インセットに関する設定は、 super.viewDidLoad を呼ぶ前に行う 18 19 // ボタンとボタンの間の間隔 20 settings.style.buttonBarMinimumLineSpacing = 0 21 //左右のインセット 22 settings.style.buttonBarLeftContentInset = 0 23 settings.style.buttonBarRightContentInset = 0 24 25 super.viewDidLoad() 26 // Do any additional setup after loading the view. 27 view.addSubview(collectionView) 28 view.addSubview(scrollView) 29 30 } 31 32 override func viewWillLayoutSubviews() { 33 super.viewWillLayoutSubviews() 34 35 // Safe Area のトップインセット 36 let topInset = view.safeAreaInsets.top 37 38 let width = view.frame.size.width 39 let height = view.frame.size.height 40 41 // Tab Bar 42 collectionView.frame = CGRect(x: 0, y: topInset, width: width, height: 64) 43 44 // View Controller 表示部 45 scrollView.frame = CGRect(x: 0, y: topInset + 64, width: width, height: height - 64) 46 47 // Auto Layout を使う場合 48 // collectionView.translatesAutoresizingMaskIntoConstraints = false 49 // collectionView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true 50 // collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 51 // collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true 52 // collectionView.heightAnchor.constraint(equalToConstant: 64).isActive = true 53 // 54 // scrollView.translatesAutoresizingMaskIntoConstraints = false 55 // scrollView.topAnchor.constraint(equalTo: collectionView.bottomAnchor).isActive = true 56 // scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 57 // scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true 58 // scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 59 } 60 61 override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] { 62 let vc1 = SubViewController() 63 vc1.view.backgroundColor = .red 64 vc1.itemInfo = "First" 65 66 let vc2 = SubViewController() 67 vc2.view.backgroundColor = .yellow 68 vc2.itemInfo = "Second" 69 70 return [vc1, vc2] 71 } 72} 73 74class SubViewController: UIViewController, IndicatorInfoProvider { // 「IndicatorInfoProvider」を追加 75 // タブのタイトルを設定 76 var itemInfo: IndicatorInfo! 77 78 override func viewDidLoad() { 79 super.viewDidLoad() 80 } 81 82 // protocol 83 func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { 84 return itemInfo 85 } 86}
投稿2021/03/08 06:36
編集2021/03/08 06:36総合スコア5086
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/08 07:19